我的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
都没有任何区别。
答案 0 :(得分:2)
要添加到@Simulant答案,您需要从ObjectId
导入pymongo.objectid
:
from pymongo.objectid import ObjectId
x = db.collection.find_one({"_id": ObjectId("569bbe3a65193cde93ce7092")})
答案 1 :(得分:1)
在_id
的内容上没有引号的情况下传递它,您还需要导入ObjectId
。
from bson.objectid import ObjectId
{"_id": ObjectId("569bbe3a65193cde93ce7092")}
如果您使用引号传递它,则您正在搜索字符串ObjectId("569bbe3a65193cde93ce7092")
作为ID的对象。但在MongoDB中,ID是一个Object而不是String。这是一个区别。