#mongodb
#mongodb
Вопрос:
У меня есть структура документа mongo, к которой я не могу понять, как выполнять запрос. Проблема в том, что я пытаюсь find
использовать вложенный документ, ключи которого представляют собой шестнадцатеричные значения, но в виде строки.
rs0:SECONDARY> db['o-plan'].findOne();
{
"_id" : ObjectId("5b198d11794c820001ee3c1c"),
"activities" : {
"5b198ddba555c20001fc26e8" : [
"5b198dc3fbfd9c0001402074"
],
"5b198d8c794c820001ee3c25" : [ ],
"5b198da4794c820001ee3c2e" : [ ],
"5b198dc3fbfd9c0001402074" : [
"5b198d8c794c820001ee3c25",
"5b198da4794c820001ee3c2e"
]
},
"createdByUser" : "kfrog",
"createdDate" : ISODate("2018-06-07T19:52:49.866Z"),
"displayId" : "OP-1",
"displayName" : "Flux Capacitor",
"id" : ObjectId("5b198d11794c820001ee3c1d"),
"modifiedByUser" : "kfrog",
"modifiedDate" : ISODate("2018-06-12T19:43:00.403Z"),
"ownerUsername" : "kfrog",
"releaseStatus" : "PENDING",
"revisionId" : ObjectId("5b198def794c820001ee3c3d"),
"version" : 1
}
Я пытаюсь найти документы, вложенный документ activities которых содержит ключ ‘5b198ddba555c20001fc26e8’, но я не получаю результатов. Как это сделать в mongo?
rs0:SECONDARY> db['o-plan'].find(
{
activities: {
'5b198ddba555c20001fc26e8': { $exists: true }
}
}
).pretty();
rs0:SECONDARY>
И название коллекции, и схема документа несколько патологичны, но это ограничения, с которыми я работаю. Должен быть способ запросить это.
Как мне найти во вложенном документе, когда мои ключи на самом деле являются числами?
Ответ №1:
Используйте точечную нотацию:
db.foo.find( { 'activities.5b198ddba555c20001fc26e8': { $exists: true } } ).pretty();