标签: pymongo

如果文档存在,MongoDB返回True

如果userID已经存在,我想返回true,否则从我的集合返回false.我有这个函数,但它总是返回True.

def alreadyExists(newID):
    if db.mycollection.find({'UserIDS': { "$in": newID}}):
        return True
    else:
        return False
Run Code Online (Sandbox Code Playgroud)

如果用户ID已经存在,我怎么能让这个函数只返回true?

python mongodb pymongo tornado-motor

17
推荐指数
2
解决办法
3万
查看次数

pymongo中的collection.getIndexes()shell命令的等价物是什么?

我似乎无法找到作为pymongo的Collection对象的一部分实现的getIndexes()命令 - 这是故意的吗?它是在类层次结构中的其他地方实现的吗?

如果不是,那么获得相同效果的pymongo规范方法是什么?

python mongodb pymongo

17
推荐指数
1
解决办法
5770
查看次数

怎样才能刮得更快

这里的工作是从一个站点中抓取一个 API https://xxx.xxx.xxx/xxx/1.jsonhttps://xxx.xxx.xxx/xxx/1417749.json并将其准确地写入 mongodb。为此,我有以下代码:

client = pymongo.MongoClient("mongodb://127.0.0.1:27017")
db = client["thread1"]
com = db["threadcol"]
start_time = time.time()
write_log = open("logging.log", "a")
min = 1
max = 1417749
for n in range(min, max):
    response = requests.get("https:/xx.xxx.xxx/{}.json".format(str(n)))
    if response.status_code == 200:
        parsed = json.loads(response.text)
        inserted = com.insert_one(parsed)
        write_log.write(str(n) + "\t" + str(inserted) + "\n")
        print(str(n) + "\t" + str(inserted) + "\n")
write_log.close()
Run Code Online (Sandbox Code Playgroud)

但是完成这项任务需要花费大量时间。这里的问题是我怎样才能加快这个过程。

python mongodb web-scraping pymongo

17
推荐指数
3
解决办法
765
查看次数

pymongo连接池和客户端请求

我知道pymongo是线程安全的,并且有一个内置的连接池.

在我正在处理的Web应用程序中,我正在为每个请求创建一个新的连接实例.

我的理解是,由于pymongo管理连接池,在每个请求上创建新连接并不是错误的方法,因为在请求结束时,连接实例将被回收并且将在后续请求中可用.

我在这里是正确的,还是我应该创建一个单个实例来跨多个请求使用?

python pymongo

16
推荐指数
1
解决办法
2677
查看次数

在javascript shell和pymongo中的db.eval()的MongoDB性能

我需要对需要在数组中旋转一些值的文档执行更新操作.MongoDB的更新查询目前不允许你$pop,然后$push在更新同一领域.在网上搜索建议后,我认为db.eval()最适合我的使用,因为它确保了原子性,我正在执行的操作非常短,因此它不会长时间锁定数据库.

这是我正在尝试做的事情的一个例子:

db.eval(function (id, newVal) {
    doc = db.collection.findOne({_id: id});
    doc.values.shift();
    doc.values.push(newVal);
    db.collection.save(doc);
}, id, newVal);
Run Code Online (Sandbox Code Playgroud)

这完美地运作!然后我启用了mongoDB分析,看看eval()命令花了多少毫秒,我总是得到少于1毫秒的结果:

 > db.system.profile.find({op: "command"}, {"millis": 1}) 
 { "millis" : 0 }
 { "millis" : 0 }
 ...
Run Code Online (Sandbox Code Playgroud)

这对我来说是个好消息,除了我的应用程序是在python中,所以我使用pymongo客户端来执行eval()命令.(上面的数据来自mongo shell)但现在,当我eval()使用pymongo 运行相同的命令时:

conn = pymongo.Connection(mongo_server_hostname)
db = conn.my_db

db.eval("""function (id, newVal) {
    doc = db.collection.findOne({_id: id});
    doc.values.shift();
    doc.values.push(newVal);
    db.collection.save(doc);
}""", id, new_val)
Run Code Online (Sandbox Code Playgroud)

我得到了非常不同的分析结果:

> db.system.profile.find({op: "command"}, {"millis": 1}) 
{ "millis" : 13 }
{ …
Run Code Online (Sandbox Code Playgroud)

performance profiling eval mongodb pymongo

16
推荐指数
1
解决办法
3593
查看次数

如何将mongodb集合中的数据加载到pandas的DataFrame中?

我是大熊猫的新手(好吧,对所有"编程"......),但我们鼓励他们尝试一下.我有一个mongodb数据库 - "测试" - 有一个名为"推文"的集合.我在ipython中访问数据库:

import sys
import pymongo
from pymongo import Connection
connection = Connection()
db = connection.test
tweets = db.tweets
Run Code Online (Sandbox Code Playgroud)

推文中文件的文件结构如下:

entities': {u'hashtags': [],
  u'symbols': [],
  u'urls': [],
  u'user_mentions': []},
 u'favorite_count': 0,
 u'favorited': False,
 u'filter_level': u'medium',
 u'geo': {u'coordinates': [placeholder coordinate, -placeholder coordinate], u'type': u'Point'},
 u'id': 349223842700472320L,
 u'id_str': u'349223842700472320',
 u'in_reply_to_screen_name': None,
 u'in_reply_to_status_id': None,
 u'in_reply_to_status_id_str': None,
 u'in_reply_to_user_id': None,
 u'in_reply_to_user_id_str': None,
 u'lang': u'en',
 u'place': {u'attributes': {},
  u'bounding_box': {u'coordinates': [[[placeholder coordinate, placeholder coordinate],
     [-placeholder coordinate, placeholder coordinate],
     [-placeholder coordinate, placeholder coordinate],
     [-placeholder …
Run Code Online (Sandbox Code Playgroud)

mongodb pymongo pandas

16
推荐指数
3
解决办法
2万
查看次数

如何在pymongo获得有序的词典?

我正在尝试在Pymongo获得有序的词典.我已经读过它可以用bson.son.Son完成.文件就在这里

但是,我似乎无法使其发挥作用.谷歌没有太多关于它.关于配置pymongo的一些讨论首先告诉它使用SON对象但没有例子.一位朋友建议在你找到时传递一个参数.他不记得了.

我能够创建SON对象.但当他们插入数据库然后再回来时,他们只是简单的说法.

我不确定是什么代码示例给你,因为我真的不知道从哪里开始.每次添加新用户时,下面的代码段都会创建一个空的SON对象.'sub_users'对象也是使用SON创建的.当我从数据库中读回帐户文档时,它们只是普通的python dicts.

    account['sub_users'][sub_user_name] = bson.SON()
    with mongo_manager.Collection(CFG.db, 'Users') as users:
        users.save(account)
Run Code Online (Sandbox Code Playgroud)

也许一个param过去找到这样的配置?这是我朋友的建议,但他不记得了.

with mongo_manager.Collection(CFG.db, 'Users') as users:                                 
    account = users.find_one({'_id': _id, 'DOC':'OrderedDict})
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

python bson pymongo data-structures

16
推荐指数
2
解决办法
7027
查看次数

无法获得allowDiskUse:True可以与pymongo一起使用

我正在aggregation result exceeds maximum document size (16MB)使用pymongo进行mongodb聚合的错误.

我首先使用该limit()选项克服了它.但是,在某些时候我得到了

Exceeded memory limit for $group, but didn't allow external sort. Pass allowDiskUse:true to opt in." error.
Run Code Online (Sandbox Code Playgroud)

好的,我会用这个{'allowDiskUse':True}选项.当我在命令行上使用它时,此选项有效,但是当我尝试在我的python代码中使用它时

result = work1.aggregate(pipe, 'allowDiskUse:true')
Run Code Online (Sandbox Code Playgroud)

我收到TypeError: aggregate() takes exactly 2 arguments (3 given)错误.(尽管在http://api.mongodb.org/python/current/api/pymongo/collection.html#pymongo.collection.Collection.aggregate:aggregate(pipeline,** kwargs)中给出了定义.

我尝试使用runCommand,或者说它的pymongo等价:

db.command('aggregate','work1',pipe, {'allowDiskUse':True})
Run Code Online (Sandbox Code Playgroud)

但现在我回到'聚合结果超过最大文档大小(16MB)'错误

如果你需要知道

pipe = [{'$project': {'_id': 0, 'summary.trigrams': 1}}, {'$unwind': '$summary'}, {'$unwind': '$summary.trigrams'}, {'$group': {'count': {'$sum': 1}, '_id': '$summary.trigrams'}}, {'$sort': {'count': -1}}, {'$limit': 10000}]
Run Code Online (Sandbox Code Playgroud)

谢谢

mongodb pymongo aggregation-framework

16
推荐指数
1
解决办法
1万
查看次数

Pymongo/bson:将python.cursor.Cursor对象转换为serializable/JSON对象

MongoDb和Python(webapp2)新手.所以,我从mongodb数据库中获取了一些数据.但我无法使用json.dumps返回的数据.这是我的代码:

exchangedata = db.Stock_Master.find({"Country": "PHILIPPINES"}, {"_id" : 0})        
self.response.write(json.dumps(exchangedata)) 
Run Code Online (Sandbox Code Playgroud)

这会引发错误:

TypeError: pymongo.cursor.Cursor object at 0x7fcd51230290 is not JSON serializable
Run Code Online (Sandbox Code Playgroud)

类型exchangedatapymongo.cursor.Cursor.如何将其转换为json对象?

python json mongodb pymongo webapp2

16
推荐指数
1
解决办法
2万
查看次数

object不是JSON可序列化的

我在使用Mongodb和Python(Flask)时遇到了一些麻烦.

我有这个api.py文件,我希望所有的请求和响应都是JSON,所以我这样实现.

#
# Imports
#

from datetime import datetime
from flask import Flask
from flask import g
from flask import jsonify
from flask import json
from flask import request
from flask import url_for
from flask import redirect
from flask import render_template
from flask import make_response
import pymongo
from pymongo import Connection
from bson import BSON
from bson import json_util

#
# App Create
#

app = Flask(__name__)
app.config.from_object(__name__)

#
# Database
#

# connect
connection = Connection()
db = …
Run Code Online (Sandbox Code Playgroud)

python json mongodb pymongo flask

15
推荐指数
3
解决办法
3万
查看次数