Написание запроса MongoDB для фильтрации на основе атрибутов ссылки? - PullRequest
0 голосов
/ 05 октября 2018

Допустим, у меня есть набор документов под названием «собака», набор документов под названием «владельцы» и ссылка на владельца из каждого документа собаки.

Например:

dog1:
{"_id": "abcdef0123456789",
 "name": "Rover",
 "owner": ObjectId("1234567890abcdef")}

owner1:
{"_id": "1234567890abcdef",
 "name": "Bob"}

Итак, учитывая этот пример, как мне найти всех собак, чей владелец называется "Боб".

Это существующая БД, поэтому я не могу изменить способ хранения данных.Я застрял в текущем формате.

1 Ответ

0 голосов
/ 05 октября 2018

Вы можете попробовать ниже $lookup агрегацию в mongodb 3.6 и выше

db.owner.aggregate([
  { "$match": { "name": "Bob" }},
  { "$lookup": {
    "from": "dogs",
    "let": { "ownerId": "$_id" },
    "pipeline": [{ "$match": { "$expr": { "$eq": ["$owner", "$$ownerId"] }}}],
    "as": "dogs"
  }}
])

или с 3.4 $lookup и выше

db.owner.aggregate([
  { "$match": { "name": "Bob" }},
  { "$lookup": {
    "from": "dogs",
    "localField": "_id",
    "foreignField": "owner",
    "as": "dogs"
  }}
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...