在这里需要更多关于pymongo的领域专业知识比我现在快:
用python编写的pymongo驱动程序的"正确"部分是否可以调用gevent monkey_patch()并在gevent"异步"greenlets中成功改变pymongo在r/w上的阻塞行为?
如果这需要更多关于gevent和pymongo的腿部工作 - 但这是可行的 - 只要我能得到一点关于irc的指导,我就会非常愿意投入时间.
谢谢!
注意:在小规模mongo写入不是一个大问题,因为我们只是在解锁前排队写入"请求".但是与fiorix谈论他的扭曲异步mongo驱动程序(https://github.com/fiorix/mongo-async-python-driver),即使是mongo的快速写入(请求)也会导致大规模异步应用程序出现问题.(当然,非阻塞读取可能会从一开始就引起问题!)
我正在努力使用mongoengine语法.
我有以下型号......
class Post(EmbeddedDocument):
uid = StringField(required=True)
text = StringField(required=True)
when = DateTimeField(required=True)
class Feed(Document):
label = StringField(required=True)
feed_url = StringField(required=True)
posts = ListField(EmbeddedDocumentField(Post))
def my_method(self, post):
pass
Run Code Online (Sandbox Code Playgroud)
...并且将post对象传递给my_method,我想更新现有帖子,如果它存在于具有匹配uid的self.posts中,或者如果不存在则推送到self.posts.
在mongoengine的一次调用中是否有语法?
我有一份文件
{ key : 'key1', value : 'value1', update_time : 100 }
Run Code Online (Sandbox Code Playgroud)
我想更改最近(更长)的更新时间.我现在正在做的是:
def update_key1(new_value, new_time):
record = find_one( { key : 'key1' } )
if not record or record['update_time'] < new_time:
update( { key : 'key1', value : new_value, update_time : new_time }, upsert=True)
Run Code Online (Sandbox Code Playgroud)
显然,这是一个额外的往返到数据库,但更重要的是有对文档没有锁,并发呼叫可能导致剩余的分贝较低NEW_TIME的价值.有没有办法在条件成立时执行upsert?
编辑:只是为了澄清,目的不是为每个键创建多个文档,然后对查找进行排序.虽然这可以解决我的问题,但这些值会发生很大变化并且会浪费很多空间.
我在Mongo有一些文件:
{"name" : "John", "age" : 26}
{"name" : "Paul", "age" : 34}
{"name" : "George", "age" : 36}
Run Code Online (Sandbox Code Playgroud)
和另一个需要表单文档的函数:
{"name" : "XXX", "value" : YY}
Run Code Online (Sandbox Code Playgroud)
是否可以在PyMongo中的查询查询中将'age'字段重命名为'value'?
即将推出的MongoDB 2.4支持全文搜索.
我们在mongo shell中使用命令执行此操作,例如
db.players.runCommand("text", {
"search": "alice",
"project": {"name": 1, "_id": 0},
"limit": 10})
Run Code Online (Sandbox Code Playgroud)
现在把它移植到pymongo时,我们必须处理runCommandpymongo Collection类没有定义的事实.我能够弄清楚真正的命令是什么,所以这在shell中起作用:
db.runCommand({
"text": "players",
"search": "alice",
"project": {"name": 1, "_id": 0},
"limit": 10})
Run Code Online (Sandbox Code Playgroud)
哪个有效.但这并没有告诉我如何在pymongo中使用它.我试过了:
db.command({
"text":"players",
"pipeline": [
("search","alice"), ("project",{"name":1,"_id":0}), ("limit",10)
]})
Run Code Online (Sandbox Code Playgroud)
哪个不起作用(它说"没有指定搜索").我也尝试过:
db.command({
"text": "players",
"search": "alice",
"project": {"name": 1, "_id": 0},
"limit":10})
Run Code Online (Sandbox Code Playgroud)
这当然失败了:"没有这样的cmd:项目".
如果我只使用search和limit,我可以让事情发挥作用
db.command({
"text": "players",
"search": "alice",
"limit": 10})
Run Code Online (Sandbox Code Playgroud)
但我想filter和projectpymongo 一起使用.有没有人使用项目和过滤器进行全文搜索?
旁白:也许有一种很好的方法可以从shell命令推断pymongo命令的形状?
我有一个包含字段类型,totalA和totalB的文档的集合
我想使用聚合框架以按类型分组 - 并将totalA和totalB的总和加在一起.
我尝试的最后一件事(不起作用)是:
'$group' : {
'_id' : '$type',
'totalA' : { '$sum' : '$totalA' },
'totalB' : { '$sum' : '$totalB' },
'totalSum' : { '$sum' : '$totalA', '$sum' : '$totalB' },
} }
Run Code Online (Sandbox Code Playgroud)
totalSum只有一个字段的总和而不是组合值.
我需要从我的Python代码连接到MongoDB,我唯一拥有的是一个url.每个mongo URL doc我可以指定数据库名称:
mongodb://host/db_name
Run Code Online (Sandbox Code Playgroud)
现在我想使用从URL指定的数据库,并且不想手动解析它以提取数据库的名称.但MongoClient没有访问默认界面的界面.有什么想法如何管理?
使用PyMongo,我在列表中有一组dict,我想提交给我的MongoDB.列表中的某些项目是新条目,有些是要更新的.
例:
在服务器数据库:
[{"_id" : 1, "foo" : "bar}]
Run Code Online (Sandbox Code Playgroud)
要发送到数据库:
[{"_id" : 1, "foo" : "HELLO"}, {"_id" : 2, "Blah" : "Bloh"}]
Run Code Online (Sandbox Code Playgroud)
我目前正在使用以下内容来插入文档,但我将如何执行上述内容?任何帮助表示赞赏!
collection.insert(myDict)
Run Code Online (Sandbox Code Playgroud) 我正在尝试导入json_util我的环境文件:
from bson import json_util
Run Code Online (Sandbox Code Playgroud)
我收到这个导入错误:no module named bson.
我试图pip安装和卸载pymongo和bson - 但似乎没有任何帮助.我发现bson包包含在pymongo中所以我明确安装它然后我收到一个EPOCH_AWARE导入错误.
目前,只安装了pymongo.当我使用此行强制虚拟环境时,它可以工作:
#subprocess.Popen(['/home/.virtualenvs/simple_worker/bin/python', fileName])
Run Code Online (Sandbox Code Playgroud)
但是当我尝试像这样通过操作系统运行它时:
os.system('PYTHON_ENV=%s python %s' % (env, fileName))
Run Code Online (Sandbox Code Playgroud)
我在bson上得到了这个导入错误.
编辑:这是点子列表输出
(simple_worker) ? worker pip list ? ?
apache-libcloud (0.17.0)
backports.ssl-match-hostname (3.4.0.2)
gnureadline (6.3.3)
google-api-python-client (1.3.1)
httplib2 (0.9.2)
ipdb (0.8)
ipython (2.3.1)
mock (1.0.1)
oauth2client (1.5.1)
pbr (0.10.7)
pika (0.9.14)
pip (8.0.2)
psutil (2.2.0)
py (1.4.26)
pyaml (15.2.1)
pyasn1 (0.1.7)
pyasn1-modules (0.0.5)
pymongo (3.2.1)
pytest (2.6.4)
pytest-mock (0.4.0)
pytz (2015.4)
PyYAML …Run Code Online (Sandbox Code Playgroud) 是否可以使用聚合框架计算一阶导数?
例如,我有数据:
{time_series : [10,20,40,70,110]}
Run Code Online (Sandbox Code Playgroud)
我正在尝试获得如下输出:
{derivative : [10,20,30,40]}
Run Code Online (Sandbox Code Playgroud)