У меня есть документы о школьниках следующим образом:
{
'id': 1,
'name': John,
'friends': [{'id': 7}, {'id': 10}],
'hair': 'short',
'has_dog': true,
'school': 'some school',
}
Учитывая два идентификатора школьников (известные идентификаторы), могу ли я получить результат, где:
-
У меня есть обе данные о ребенке: (имя, школа)
Список общих друзей, у которых короткие волосы, а также собака?
Пример результата:
'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', ......}]
}
Я не могу сделать это в одном запросе. В настоящее время я использую конвейер агрегации, чтобы получить:
- Список общих друзей по
$setIntersection
- Затем запустить запрос ко всей более широкой коллекции, чтобы отфильтровать документы, которым принадлежит идентификатор. в массиве пересечений и волосы короткие и has_dog имеет значение true.
Я использую MongoDB 3.0.12 Есть ли способ сделать это только в одном запросе? И лучше ли сделать это в одном запросе, чем то, что я уже сделал?
Спасибо за вашу помощь заранее.