cuốn sách gpt4 ai đã làm

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

In lại Tác giả: Hồ Xil 更新时间:2023-11-01 09:12:28 25 4
mua khóa gpt4 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" } })

câu trả lời hay nhất

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

此外,NHẬN DẠNG 是一个 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
Hồ Xil
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress