我的Mongo数据库中只有一个文档:

{"_id" : ObjectId("569bbe3a65193cde93ce7092"),
 "categories" : [{_id: 0, "category": "Groceries"},
                 {_id: 1, "category": "Bills"}, . . .]}

在我的项目中使用PyMongo,我得到此结果,调用find_one():
x = db.collection.find_one({"_id": "ObjectId(\"569bbe3a65193cde93ce7092\")"})
print(x)
// None

每当我在Mongo Shell中执行相同的查询时,它都会返回我的文档。我一辈子都无法弄清楚为什么这行不通。使用find({})返回文档,所以我知道PyMongo可以看到它。

我可以调用find_one({"categories": {"$exists": True}})来检索文档,由于这将是唯一包含“类别”的文档,因此可以使用;但是,现在让我困惑的是,为什么通过_id访问文档给我带来了这样的麻烦。逃避引号和引号包裹569bbe3a65193cde93ce7092都没有任何区别。

最佳答案

要添加到@Simulant答案中,您需要从ObjectId导入bson.objectid:

from bson.objectid import ObjectId

x = db.collection.find_one({"_id": ObjectId("569bbe3a65193cde93ce7092")})

关于python - 当传递_id作为查询参数时,PyMongo find_one()不返回任何内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34841500/

10-13 08:04