标签: pymongo

pymongo + gevent:给我一个香蕉,只是monkey_patch?

在这里需要更多关于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的快速写入(请求)也会导致大规模异步应用程序出现问题.(当然,非阻塞读取可能会从一开始就引起问题!)

python monkeypatching mongodb pymongo gevent

13
推荐指数
1
解决办法
4012
查看次数

更新mongoengine中的嵌入文档列表

我正在努力使用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的一次调用中是否有语法?

python mongodb pymongo mongoengine

13
推荐指数
1
解决办法
8613
查看次数

如何在mongo中有条件地插入文档?

我有一份文件

{ 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?

编辑:只是为了澄清,目的不是为每个键创建多个文档,然后对查找进行排序.虽然这可以解决我的问题,但这些值会发生很大变化并且会浪费很多空间.

mongodb pymongo

13
推荐指数
1
解决办法
9083
查看次数

是否可以在PyMongo中重命名Mongo查询的输出中的字段?

我在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'?

python mongodb pymongo

13
推荐指数
1
解决办法
9938
查看次数

在Pymongo的全文搜索

即将推出的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:项目".

如果我只使用searchlimit,我可以让事情发挥作用

db.command({
    "text": "players", 
    "search": "alice",
    "limit": 10})
Run Code Online (Sandbox Code Playgroud)

但我想filterprojectpymongo 一起使用.有没有人使用项目和过滤器进行全文搜索?

旁白:也许有一种很好的方法可以从shell命令推断pymongo命令的形状?

mongodb pymongo

13
推荐指数
1
解决办法
5034
查看次数

是否可以使用聚合框架将MongoDB中的2个字段相加?

我有一个包含字段类型,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只有一个字段的总和而不是组合值.

mongodb pymongo aggregation-framework

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

pymongo默认数据库连接

我需要从我的Python代码连接到MongoDB,我唯一拥有的是一个url.每个mongo URL doc我可以指定数据库名称:

mongodb://host/db_name
Run Code Online (Sandbox Code Playgroud)

现在我想使用从URL指定的数据库,并且不想手动解析它以提取数据库的名称.但MongoClient没有访问默认界面的界面.有什么想法如何管理?

python mongodb pymongo

13
推荐指数
1
解决办法
5850
查看次数

Python - Pymongo插入和更新文档

使用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)

python mongodb pymongo

13
推荐指数
4
解决办法
4万
查看次数

导入错误:没有名为bson的模块

我正在尝试导入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)

python bson pymongo

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

使用MongoDB聚合框架计算一阶导数

是否可以使用聚合框架计算一阶导数?

例如,我有数据:

{time_series : [10,20,40,70,110]}
Run Code Online (Sandbox Code Playgroud)

我正在尝试获得如下输出:

{derivative : [10,20,30,40]}
Run Code Online (Sandbox Code Playgroud)

python mapreduce mongodb pymongo aggregation-framework

13
推荐指数
1
解决办法
439
查看次数