如果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?
我似乎无法找到作为pymongo的Collection对象的一部分实现的getIndexes()命令 - 这是故意的吗?它是在类层次结构中的其他地方实现的吗?
如果不是,那么获得相同效果的pymongo规范方法是什么?
这里的工作是从一个站点中抓取一个 API https://xxx.xxx.xxx/xxx/1.json,https://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)
但是完成这项任务需要花费大量时间。这里的问题是我怎样才能加快这个过程。
我知道pymongo是线程安全的,并且有一个内置的连接池.
在我正在处理的Web应用程序中,我正在为每个请求创建一个新的连接实例.
我的理解是,由于pymongo管理连接池,在每个请求上创建新连接并不是错误的方法,因为在请求结束时,连接实例将被回收并且将在后续请求中可用.
我在这里是正确的,还是我应该创建一个单个实例来跨多个请求使用?
我需要对需要在数组中旋转一些值的文档执行更新操作.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) 我是大熊猫的新手(好吧,对所有"编程"......),但我们鼓励他们尝试一下.我有一个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) 我正在尝试在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)
有任何想法吗?
我正在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和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)
类型exchangedata是pymongo.cursor.Cursor.如何将其转换为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)