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

Python 使用pymongo在MongoDB中通过ObjectId获取值的最有效方法是什么?,python,mongodb,pymongo,Python,Mongodb,Pymongo,或者完全是别的什么?我知道_id列是自动索引的,我希望利用这种效率 谢谢 如果你是通过_id得到一个值,那么我会说是的,这是最有效的方法 根据您的数据,为该值编制索引并对其进行搜索可能更有效。如果您知道_id,则不应仅以这种方式调用数据库测试。查找一个(ObjectId('4f3dd96d1453373bcb000000')) 您在pymongo中的完整代码可能是这样的 db.test.find_one(ObjectId('4f3dd96d1453373bcb000000')) 是的,你的方法

或者完全是别的什么?我知道_id列是自动索引的,我希望利用这种效率


谢谢

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


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

如果您知道_id,则不应仅以这种方式调用<代码>数据库测试。查找一个(ObjectId('4f3dd96d1453373bcb000000'))
您在pymongo中的完整代码可能是这样的

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

是的,你的方法是正确的

由于您询问的是效率,请记住,当您为提高性能而优化读取操作时,您可能希望只读取所需的属性。如果文档的某些属性很大,那么这可以显著降低IO成本(将数据从服务器传输到客户端)。例如,如果您的文档有20个属性,但您只使用了其中的5个属性,那么不要将其他15个属性拖到电线上。在pymongo中,可以使用
collection.find
函数的可选
fields
参数执行此操作。显然,这里需要平衡性能和代码可维护性,因为列出属性会增加维护成本


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

你能详细阐述一下这一点吗?详细阐述了我们关心的后备属性。这会使您的代码更加冗长,所以如果您只是想在这里或那里保存一些字节,就不用麻烦了。但是,如果您有非常大的属性,有时您不需要它们,那么节省的成本可能会增加。取决于您的数据和应用程序的性能要求。谢谢;这些增益是指mongodb使用了多少内存吗?不,mongodb已经在内存中拥有了所有属性。我想指出的是,由于向服务器发送到客户端的字节数更少,所以网络开销会更低。此外,python客户端/脚本将使用更少的内存,这是正确的。
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)