Автоматический запрос во вложенном документе, когда ключи являются числовыми

#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();