【发布时间】:2012-06-13 22:30:43
【问题描述】:
db.test.find_one(ObjectId('4f3dd96d1453373bcb000000'))
或者完全是别的什么?我知道 _id 列是自动索引的,我希望利用这种效率。
谢谢!
【问题讨论】:
db.test.find_one(ObjectId('4f3dd96d1453373bcb000000'))
或者完全是别的什么?我知道 _id 列是自动索引的,我希望利用这种效率。
谢谢!
【问题讨论】:
是的,你的方法是正确的。
既然您询问的是效率,请记住,当您优化读取操作以提高性能时,您可能只想读取您需要的属性。如果您的文档的某些属性很大,那么这可以显着降低 IO 成本(将数据从服务器传输到客户端)。例如,如果您的文档有 20 个属性,但您只使用了其中的 5 个,那么不要将其他 15 个拉到线上。在 pymongo 中,您可以使用 collection.find 函数的可选 fields 参数来执行此操作。显然,您需要在这里平衡性能与代码可维护性,因为列出属性会增加维护成本。
the official docs 提供更多优化建议。他们的列表包括“优化#3:仅选择相关字段”,这正是我上面所说的。
【讨论】:
如果您通过 _id 获得特定的值,那么我会说是的,这是最有效的方法。
根据您的数据,索引该值并对其进行搜索可能会更有效。
【讨论】:
如果您知道 _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)
【讨论】: