标签: pymongo

你能在Mongo中为$ addToSet指定一个键吗?

我有一份文件:

{ 'profile_set' :
  [
    { 'name' : 'nick', 'options' : 0 },
    { 'name' : 'joe',  'options' : 2 },
    { 'name' : 'burt', 'options' : 1 }
  ] 
}
Run Code Online (Sandbox Code Playgroud)

并且如果名称尚不存在(无论选项如何),都希望将新文档添加到profile_set集.

所以在这个例子中,如果我试图添加:

{'name' : 'matt', 'options' : 0}

它应该添加它,但添加

{'name' : 'nick', 'options' : 2}

应该什么也不做,因为文件已经存在,nick即使名称option不同.

Mongo似乎与整个元素匹配,我最终检查它是否相同,我最终得到了

profile_set containing [{'name' : 'nick', 'options' : 0}, {'name' : 'nick', 'options' : 2}]
Run Code Online (Sandbox Code Playgroud)

有没有办法用$ addToSet执行此操作,还是我必须推送另一个命令?

mongodb pymongo

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

如何从pymongo发出"show dbs"

我正在使用pymongo,我无法弄清楚如何执行相当于"show dbs"的mongodb交互式shell.

python mongodb pymongo

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

pymongo.errors.CursorNotFound:游标id'...'在服务器上无效

我试图使用以下代码获取mongo数据库中存在的一些ID:

client = MongoClient('xx.xx.xx.xx', xxx)
db = client.test_database
db = client['...']
collection = db.test_collection
collection = db["..."]


for cursor in collection.find({ "$and" : [{ "followers" : { "$gt" : 2000 } }, { "followers" : { "$lt" : 3000 } }, { "list_followers" : { "$exists" : False } }] }): 
    print cursor['screenname']
    print cursor['_id']['uid']
    id = cursor['_id']['uid']
Run Code Online (Sandbox Code Playgroud)

但是,过了一会儿,我收到这个错误:

pymongo.errors.CursorNotFound:游标id'...'在服务器上无效.

我发现这篇文章提到了这个问题.然而,我不清楚采取哪种解决方案.可以使用find().batch_size(30)吗?上面的命令到底是做什么的?我可以使用所有数据库ID batch_size吗?

python mongodb pymongo

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

如何将pymongo.cursor.Cursor转换为dict?

我正在使用pymongo来查询区域中的所有项目(实际上是查询地图上某个区域中的所有场所).我db.command(SON())之前用过搜索球形区域,它可以返回一个字典,在字典中有一个叫做results包含场地的键.现在我需要搜索一个方形区域,我建议使用db.places.find,但是,这会给我一个pymongo.cursor.Cursor课程,我不知道如何从中提取场地结果.

有谁知道我是否应该将光标转换为字典并提取结果,或使用其他方法查询方形区域中的项目?BTW,db是pymongo.database.Database类

代码是:

>>> import pymongo
>>> db = pymongo.MongoClient(host).PSRC 
>>> resp = db.places.find({"loc": {"$within": {"$box": [[ll_lng,ll_lat], [ur_lng,ur_lat]]}}})
>>> for doc in resp:
>>>     print(doc)
Run Code Online (Sandbox Code Playgroud)

我有ll_lng,ll_lat,ur_lng和ur_lat的值,使用这些值,但它不打印此代码

python dictionary mongodb pymongo mongodb-query

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

Pymongo/MongoDB:创建索引还是确保索引?

我不明白create_indexensure_indexpymongo 之间的区别.在MongoDB索引页面上,它说

你可以通过调用来创建一个索引 ensureIndex()

然而,在pymongo有两个不同的命令create_indexensure_index,并为创建索引有文档:

与尝试无条件地创建索引的create_index()不同,ensure_index()利用驱动程序中的某些缓存,以便它只尝试创建可能尚不存在的索引.当PyMongo创建(或确保)索引时,它会被"记住"ttl秒.在该时间限制内重复调用ensure_index()将是轻量级的 - 它们不会尝试实际创建索引.

我是否正确理解ensure_index将创建一个永久索引,或者我是否需要使用create_index它?

python mongodb pymongo

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

如何使用PyMongo查找所有集合的名称?

如何使用PyMongo查找所有集合的名称并查找所选集合中的所有字段?我有数据库的名称和所选集合的名称.(场景:用户输入数据库名称,需要查找所有集合并显示在下拉列表中,当用户点击一个项目时需要查找该集合中的所有字段)

python pymongo

49
推荐指数
5
解决办法
7万
查看次数

如何使用pymongo更新值?

我有一个这种形式的mongodb集合:

{id=ObjectId(....),key={dictionary of values}}
where dictionary of values is {'a':'1','b':'2'.....}
Run Code Online (Sandbox Code Playgroud)

让值词典'd'.我需要更新密钥的值'd'.即我想改变'a':'1''a':'2' 如何在pymongo中做到这一点?

代码是这样的:

productData is a collection in mongoDB
for p in productData.find():
     for k,v in p.iteritems():
         value=v['a']
         value=value+1
         v['a']=value
Run Code Online (Sandbox Code Playgroud)

现在反映productData中的新值.

这是我尝试过的,它引入了一个新的键值对而不是更新

for p in productData.find():
    for k,v in p.iteritems():
         value=v['a']
         value=value+1
         v['a']=value
         productData.update({'_id':mongoId},{"$set":{'d.a':'100'}},upsert=False)
Run Code Online (Sandbox Code Playgroud)

python mongodb pymongo

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

如何将objectid转换为字符串

我想从ObjectId对象中获取字符串字符.我用pymongo.例如:ObjectId("543b591d91b9e510a06a42e2")我想得到"543b591d91b9e510a06a42e2".

它说ObjectId.toString(),我看到了医生ObjectId.valueOf().

所以我做了这段代码:from bson.objectid import ObjectId.

但是当我使用时ObjectId.valueOf(),它显示:

'ObjectId'对象没有属性'valueOf'.

我怎么才能得到它?谢谢.

pymongo objectid

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

使用Pymongo获取集合的所有文档

我想编写一个函数来返回mycollectionmongodb中包含的所有文档

from pymongo import MongoClient

if __name__ == '__main__':
    client = MongoClient("localhost", 27017, maxPoolSize=50)
    db=client.mydatabase
    collection=db['mycollection']
    cursor = collection.find({})
    for document in cursor:
        print(document)
Run Code Online (Sandbox Code Playgroud)

但是,该函数返回: Process finished with exit code 0

python mongodb pymongo

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

使用PyMongo时,Collection对象不可调用错误

继PyMongo 教程之后,在insert_one集合上调用方法时出现错误.

In [1]: import pymongo

In [2]: from pymongo import MongoClient

In [3]: client = MongoClient()

In [4]: db = client.new_db

In [5]: db
Out[5]: Database(MongoClient('localhost', 27017), u'new_db')

In [6]: posts = db.posts

In [7]: posts.insert_one({'a':1})
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-7-2271c01f9a85> in <module>()
----> 1 posts.insert_one({'a':1})

C:\Anaconda\lib\site-packages\pymongo-2.8-py2.7-win32.egg\pymongo\collection.py in __call__(self, *a
rgs, **kwargs)
   1771                         "call the '%s' method on a 'Collection' object it is "
   1772                         "failing because no such method exists." %
-> …
Run Code Online (Sandbox Code Playgroud)

python mongodb pymongo

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

标签 统计

pymongo ×10

mongodb ×8

python ×8

dictionary ×1

mongodb-query ×1

objectid ×1