db.test.find_one(ObjectId('4f3dd96d1453373bcb000000'))
还是别的什么呢?我知道_id列是自动编入索引的,我希望能够充分利用这种效率。
谢谢!
答案 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)