gpt4 book ai didi

python - Pymongo 在子文档中通过 _id 查找

转载 作者:可可西里 更新时间:2023-11-01 09:12:28 25 4
gpt4 key购买 nike

假设我的数据库中的这一项:

{"_id" : ObjectID("526fdde0ef501a7b0a51270e"),
"info": "foo",
"status": true,
"subitems : [ {"subitem_id" : ObjectID("65sfdde0ef501a7b0a51e270"),
//more},
{....}
],
//more
}

我想查找(或 find_one,无关紧要)带有 "subitems.subitem_id": xxx 的文档。

我试过以下方法。它们都返回一个空列表。

from pymongo import MongoClient,errors
from bson.objectid import ObjectId

id = '65sfdde0ef501a7b0a51e270'

db.col.find({"subitems.subitem_id" : id } ) #obviously wrong
db.col.find({"subitems.subitem_id" : Objectid(id) })
db.col.find({"subitems.subitem_id" : {"$oid":id} })
db.col.find({"subitems.subitem_id.$oid" : id })
db.col.find({"subitems.$.subitem_id" : Objectid(id) })

但是在 mongoshell 中这个是有效的:

find({"subitems.subitem_id" : { "$oid" : "65sfdde0ef501a7b0a51e270" } })

最佳答案

文字 65sfdde0ef501a7b0a51e270 不是十六进制,因此不是有效的 ObjectId。

此外,id 是一个 Python 内置函数。避免重置它。

最后,您执行查找但不对其求值,因此您看不到任何结果。请记住 pymongo 游标是惰性的。

试试这个。

from pymongo import MongoClient
from bson.objectid import ObjectId

db = MongoClient().database
oid = '65cfdde0ef501a7b0a51e270'

x = db.col.find({"subitems.subitem_id" : ObjectId(oid)})

print list(x)

请注意,我将 oid 调整为有效的十六进制字符串。

Mongo JavaScript shell 中的相同查询。

db.col.find({"subitems.subitem_id" : new ObjectId("65cfdde0ef501a7b0a51e270")})

关于python - Pymongo 在子文档中通过 _id 查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19731153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com