сопоставить агрегацию для массива, который не работает должным образом Mongodb - PullRequest
1 голос
/ 29 апреля 2019

Я хочу найти всю запись, которая существует между входными аргументами.Если я передаю как аргументы, так и аргументы как одно и то же, то он должен найти точное совпадение.

У меня есть запрос ниже:

db.runCommand(
{
    aggregate: "mycoll",
    pipeline: [
        {
            "$match": {"NUM": {$gte: 25, $lte:25 } }
        }
    ]
}
)

Данные сбора:

{"_id" : "1","NUM" : [21,24] }
{"_id" : "2","NUM" : [25,29] }
{"_id" : "3","NUM" : [24,26,28] }

Вывод вышеуказанного запроса:

{"_id" : "2","NUM" : [25,29] }
{"_id" : "3","NUM" : [24,26,28] }   //Why this record come No any 25 record exits

1 Ответ

1 голос
/ 29 апреля 2019

Причина в том, что ваши условия применяются к массиву отдельно.Есть элемент больше 25, а также элемент меньше 25, поэтому вы получаете целый массив.Чтобы это исправить, вам нужен оператор $ elemMatch :

{
    "$match": {
       NUM: {
          $elemMatch: {
              $gte: 25,
              $lte: 25
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...