Если предположить, что это один элемент из моей базе данных:PyMongo найти по _id в поддокументами
{"_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" } })
Качество ответов значительно улучшается при предоставлении дополнительных пояснений. –
Улучшенные и добавленные примеры. – nickzam
Обратите внимание на типографские ошибки в этом ответе и на вопрос. Если вы видите Objectid или ObjectID, он должен прочитать ObjectId. Заглавная буква I и буквенное обозначение d. И в JavaScript, и в Python. – Rafa