使用pymongo在MongoDB中通过ObjectId获取值的最有效方法是什么?

时间:2012-02-17 15:38:24

标签: python mongodb pymongo

db.test.find_one(ObjectId('4f3dd96d1453373bcb000000'))

还是别的什么呢?我知道_id列是自动编入索引的,我希望能够充分利用这种效率。

谢谢!

3 个答案:

答案 0 :(得分:2)

是的,你的方法是正确的。

由于您在询问效率,请记住,在优化性能读取操作时,您可能只想阅读所需的属性。如果文档的某些属性很大,那么这可以显着降低IO成本(将数据从服务器传输到客户端)。例如,如果您的文档有20个属性,但您只使用其中的5个属性,则不要通过网络拉动其他15个属性。在pymongo中,您可以使用fields函数的可选collection.find参数执行此操作。显然,您需要在此处平衡性能与代码可维护性,因为列出属性会增加维护成本。

the official docs中提供了更多优化建议。他们的列表包括“优化#3:仅选择相关字段”,这正是我上面提到的。

答案 1 :(得分:1)

如果你专门通过_id得到一个值,那么我会说是的,这是最有效的方法。

根据您的数据,索引该值并对其进行搜索可能更有效。

答案 2 :(得分:0)

如果你知道_id,那么你只应该以这种方式打电话。 db.test.find_one(ObjectId('4f3dd96d1453373bcb000000'))
你在pymongo的完整代码可能是这样的

connection=Connection(self.host ) #%(self.user_name,self.password))
    #connection1=Connection(host=self.host, port=self.port)
    db=connection[self.db_name]
    db.authenticate(self.user_name, self.password)
    collection=db[self.question_collection]
    obj_id= ObjectId(_id)
    info=collection.find_one(obj_id)