我正在使用pymongo驱动程序.据说,可以使用字符串来查询文档的_id字段,如下所示:
thing = db.things.find_one({'_id':'4ea113d6b684853c8e000001'})
Run Code Online (Sandbox Code Playgroud)
但它不起作用.我究竟做错了什么?
我试图用python从mongodb中检索数据.我的数据库包含大量数据.所以我想在检索时限制数据.我试过了
import datetime
from pymongo import Connection
connection = Connection('localhost',27017)
db = connection['MyWork']
db_data = db.myusers.find().limit(2)
#db_data = db.myusers.find()[0:2]
print db_data
print db_data.count()
print db_data[0]
print db_data[1]
print db_data[2]
Run Code Online (Sandbox Code Playgroud)
但是当我尝试上面时,我得到的文件不止两个.我正在使用pymongo驱动程序.如何限制值
<pymongo.cursor.Cursor object at 0x000000000267D518>
3
{u'age': 24.0, u'_id': ObjectId('552b6e90aad3e2d909d5fb28'), u'place': u'Ravipadu', u'name': u'Shiva'}
{u'age': 28.0, u'_id': ObjectId('552b6eabaad3e2d909d5fb29'), u'place': u'Rajahmundry', u'name': u'Anil'}
{u'age': 30.0, u'_id': ObjectId('552b6ec1aad3e2d909d5fb2a'), u'place': u'Manchili', u'name': u'Kishore'}
Run Code Online (Sandbox Code Playgroud) 如果集合存在且存在为空(如何从集合中删除),如何检查PyMongo?我试过像
collection.remove()
Run Code Online (Sandbox Code Playgroud)
要么
collection.remove({})
Run Code Online (Sandbox Code Playgroud)
但它不会删除集合.怎么做 ?
我在mongodb用户列表上问了同样的问题:http://groups.google.com/group/mongodb-user/browse_thread/thread/b3470d6a867cd24
我希望这个论坛上有人可能会有一些见解......
我运行了一个简单的实验来比较使用python和java的游标迭代的性能,并发现python实现速度慢了大约10倍.我希望有人可以告诉我这是否有预期的差异,或者我是否在python方面做了一些明显低效的事情.
基准测试很简单:它执行查询,迭代光标,并检查每个文档中的相同字段.在python版本中,我可以每秒检查大约22k个文档.在java版本中,我可以每秒检查大约220k文档.
我已经看到了一些关于python性能的类似问题,我已经接受了建议,并确保我使用的是C扩展:
>>> import pymongo
>>> pymongo.has_c()
True
>>> import bson
>>> bson.has_c()
True
Run Code Online (Sandbox Code Playgroud)
最后,我不认为差异是由于python和java之间的根本区别,至少在我的测试代码级别.例如,如果我将查询的文档存储在python列表中,我可以非常快速地遍历该列表.换句话说,它不是一个低效的python for循环来解释差异.此外,在插入文档时,我获得了与Java相比几乎相同的性能.
以下是有关查询的更多详细信息:
for post in db.datasets.find({"test_set":"abc"}).sort("abc",pymongo.DESCENDING).skip((page-1)*num).limit(num):
Run Code Online (Sandbox Code Playgroud)
这是我目前的代码.
我如何得到计数()?
对于我的一个项目,我更喜欢使用Django + Mongo.
我为什么要使用MongoEngine,而不仅仅是PyMongo?有什么好处?使用PyMongo查询会产生已经完成对象的结果,不是吗?那么MongoEngine的目的是什么?
我正在尝试使用MongoDB和Flask(使用pymongo驱动程序)创建Web服务.当然,对数据库的查询返回包含"_id"字段的文档.我不想将其发送给客户端,所以我该如何删除它?
这是一个Flask路线:
@app.route('/theobjects')
def index():
objects = db.collection.find()
return str(json.dumps({'results': list(objects)},
default = json_util.default,
indent = 4))
Run Code Online (Sandbox Code Playgroud)
返回:
{
"results": [
{
"whatever": {
"field1": "value",
"field2": "value",
},
"whatever2": {
"field3": "value"
},
...
"_id": {
"$oid": "..."
},
...
}
]}
Run Code Online (Sandbox Code Playgroud)
我以为它是一本字典,我可以在返回之前删除该元素:
del objects['_id']
Run Code Online (Sandbox Code Playgroud)
但是这会返回一个TypeError:
TypeError: 'Cursor' object does not support item deletion
Run Code Online (Sandbox Code Playgroud)
所以它不是字典,而是我必须将每个结果作为字典迭代.所以我试着用这段代码做到这一点:
for object in objects:
del object['_id']
Run Code Online (Sandbox Code Playgroud)
每个对象字典看起来都是我现在喜欢的方式,但是对象光标是空的.所以我尝试创建一个新的字典,并在从每个字典中删除_id后,添加到Flask将返回的新字典:
new_object = {}
for object in objects:
for key, item in objects.items():
if key == '_id':
del …Run Code Online (Sandbox Code Playgroud) 如何在PyMongo中使用sql"like"?
>>> db.houses.find().count()
11616
>>> db.houses.find({"hid":u"16999"}).count()
1
>>> db.houses.find({"hid":u"/9/"}).count()
0
Run Code Online (Sandbox Code Playgroud)
该文件说,SQL"喜欢"(SELECT * FROM users WHERE name LIKE "%Joe%"MongoDB中)是db.users.find ({name:/Joe/}).
如果直接向cli-client接口mongodb指定查询,那么一切正常,但在pymongo中不起作用.
问题是什么?
谢谢.
我想将MongoEngine用于我的下一个项目.现在我想知道我是否也可以在同一个项目中直接使用PyMongo.只是因为我需要一些非常特殊的东西,不能直接通过mongoengine支持.
有没有怀疑这会起作用,或者我不应该这样做!?
是否可以使用pymongo将变量用于集合名称?例如:
col = 'my_collection'
db.col.update()
Run Code Online (Sandbox Code Playgroud) mongodb ×10
pymongo ×10
python ×6
mongoengine ×2
count ×1
database ×1
django ×1
mongodb-java ×1
nosql ×1