我有一份文件:
{ '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执行此操作,还是我必须推送另一个命令?
我正在使用pymongo,我无法弄清楚如何执行相当于"show dbs"的mongodb交互式shell.
我试图使用以下代码获取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
吗?
我正在使用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的值,使用这些值,但它不打印此代码
我不明白create_index
和ensure_index
pymongo 之间的区别.在MongoDB索引页面上,它说
你可以通过调用来创建一个索引
ensureIndex()
然而,在pymongo有两个不同的命令create_index
和ensure_index
,并为创建索引有文档:
与尝试无条件地创建索引的create_index()不同,ensure_index()利用驱动程序中的某些缓存,以便它只尝试创建可能尚不存在的索引.当PyMongo创建(或确保)索引时,它会被"记住"ttl秒.在该时间限制内重复调用ensure_index()将是轻量级的 - 它们不会尝试实际创建索引.
我是否正确理解ensure_index
将创建一个永久索引,或者我是否需要使用create_index
它?
如何使用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) 我想从ObjectId对象中获取字符串字符.我用pymongo.例如:ObjectId("543b591d91b9e510a06a42e2")
我想得到"543b591d91b9e510a06a42e2"
.
它说ObjectId.toString()
,我看到了医生ObjectId.valueOf()
.
所以我做了这段代码:from bson.objectid import ObjectId
.
但是当我使用时ObjectId.valueOf()
,它显示:
'ObjectId'对象没有属性'valueOf'.
我怎么才能得到它?谢谢.
我想编写一个函数来返回mycollection
mongodb中包含的所有文档
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
继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)