MongoBD: можно ли расширить пространство поиска при передаче результатов на следующий этап в конвейере агрегации - PullRequest
0 голосов
/ 26 марта 2020

У меня есть документы о школьниках следующим образом:

{
    'id': 1,
    'name': John,
    'friends': [{'id': 7}, {'id': 10}],
    'hair': 'short',
    'has_dog': true,
    'school': 'some school',
}

Учитывая два идентификатора школьников (известные идентификаторы), могу ли я получить результат, где:

  1. У меня есть обе данные о ребенке: (имя, школа)

  2. Список общих друзей, у которых короткие волосы, а также собака?

Пример результата:

    'known_kids': [{'name': 'John', 'school': 'some school'},
             {'name': 'another kid', 'school': 'whatever school'],
     'common_friends_with_short_hair_and_dog': [
             { 'name': 'common_friend_1', ......},
             { 'name': 'common_friend_2', ......}]
}

Я не могу сделать это в одном запросе. В настоящее время я использую конвейер агрегации, чтобы получить:

  1. Список общих друзей по $setIntersection
  2. Затем запустить запрос ко всей более широкой коллекции, чтобы отфильтровать документы, которым принадлежит идентификатор. в массиве пересечений и волосы короткие и has_dog имеет значение true.

Я использую MongoDB 3.0.12 Есть ли способ сделать это только в одном запросе? И лучше ли сделать это в одном запросе, чем то, что я уже сделал?

Спасибо за вашу помощь заранее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...