Найти значение в той же коллекции (вложенные находки) - PullRequest
0 голосов
/ 25 марта 2020

У меня есть коллекционные животные, например:

const animal1 = {
    id: '001',
    name: "cat",
    num: '001',
    strength: 2,
    family: "felines",
    animalsRelated:[ 
        {
            "num" : "002",
            "name" : "Tiger"
        }, 
        {
            "num" : "003",
            "name" : "Lion"
        }
    ]
}

const animal2 = {
    id: "002",
    num: "002",
    name: "Tiger",
    strength: 4,
    family: "felines"
}

const animal3 = {
    id: "003",
    num: "003",
    name: "Lion",
    strength: 2,
    family: "felines"
}

Мне нужно попробовать только кошку с поиском запроса, если какое-либо из их животных имеет отношение более 3. В этом случае запрос даст нам Cat, но если бы сила 2 животного была 2, это не дало бы нам Кота, это ничего бы не дало. Есть идеи? Я пытался с совпадением и поиском без успеха. Спасибо за ваше время.

1 Ответ

0 голосов
/ 26 марта 2020

Решением может быть следующее

db.animals.aggregate([ 
  { $lookup: { 
      from: "animals", 
      localField: "animalsRelated.num", 
      foreignField: "num", 
      as: "animalsRelated" 
    } 
  }, 
  { $match: { "animalsRelated.strength": { $gt: 3 } } }
])

Идея состоит в том, чтобы использовать $ lookup для выполнения объединения и, следовательно, "развернуть" вложенные документы в их полную форму, а затем использовать $ match для применения ограничения.

...