MongoError: не может вкладывать $ под $ в - PullRequest
0 голосов
/ 18 января 2019

Я пытаюсь запросить несколько документов, которые имеют пару basename и entries, в то время как entries - это массив, содержащий поле с именем crc.

Пример 2 item2:

{
  "basename": "2020bb",
  "entries": [
    {
      "name": "030-c1.bin",
      "extension": "bin",
      "basename": "030-c1",
      "crc": "4f5e19bd",
      "size": 1048576
    },
    {
      "name": "030-c2.bin",
      "extension": "bin",
      "basename": "030-c2",
      "crc": "d6314bf0",
      "size": 1048576
    },
    {
      "name": "030-c3.bin",
      "extension": "bin",
      "basename": "030-c3",
      "crc": "47fddfee",
      "size": 1048576
    }
  ]
},
{
  "basename": "mutnat",
  "entries": [
    {
      "name": "sp-s2.sp1",
      "extension": "sp1",
      "basename": "sp-s2",
      "crc": "9036d879",
      "size": 1048576
    },
    {
      "name": "sp-s3.sp1",
      "extension": "sp1",
      "basename": "sp-s3",
      "crc": "c7f2fa45",
      "size": 1048576
    },
    {
      "name": "sp-4.sp1",
      "extension": "sp1",
      "basename": "sp-s4",
      "crc": "e72943de",
      "size": 1048576
    }
  ]
}

Я знаю basename s и crc s, и я пытаюсь найти много предметов, содержащих правильные пары. Для этого я использую $in, $all и $elemMatch

{
  "basename": {
    "$in": [
      "2020bb",
      "mutnat"
    ]
  },
  "entries": {
    "$in": [
      {
        "$all": [
          { "$elemMatch": { "crc": "4f5e19bd" } },
          { "$elemMatch": { "crc": "d6314bf0" } },
          { "$elemMatch": { "crc": "47fddfee" } }
        ]
      },
      {
        "$all": [
          { "$elemMatch": { "crc": "9036d879" } },
          { "$elemMatch": { "crc": "c7f2fa45" } },
          { "$elemMatch": { "crc": "e72943de" } }
        ]
      }
    ]
  }
}

Имейте в виду, что только для краткости этого примера У меня только один элемент внутри $in s. В действительности в этих массивах есть несколько элементов.

С этим запросом, однако, я получаю эту ошибку:

MongoError: cannot nest $ under $in

редактировать: уточнил мои данные и мой запрос

1 Ответ

0 голосов
/ 18 января 2019
db.xxx.find({
  "basename": "2020bb",
  "entries": {
     $elemMatch: {
       "crc": { $in: ["4f5e19bd", "d6314bf0", "47fddfee" ] }
     }
   }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...