Скажем, у меня есть набор документов под названием "собака", набор документов, называемых "владельцами", и ссылка на владельца из каждого документа собаки.
Например:
dog1:
{"_id": "abcdef0123456789",
"name": "Rover",
"owner": ObjectId("1234567890abcdef")}
owner1:
{"_id": "1234567890abcdef",
"name": "Bob"}
Итак, учитывая этот пример, как мне найти всех собак, чей владелец называется "Боб".
Это существующая БД, поэтому я не могу изменить способ хранения данных. Я застрял в текущем формате.
Вы можете попробовать ниже $lookup
aggregation в mongodb 3.6 и выше
db.owner.aggregate([
{ "$match": { "name": "Bob" }},
{ "$lookup": {
"from": "dogs",
"let": { "ownerId": "$_id" },
"pipeline": [{ "$match": { "$expr": { "$eq": ["$owner", "$$ownerId"] }}}],
"as": "dogs"
}}
])
или с $lookup
3.4 $lookup
и выше
db.owner.aggregate([
{ "$match": { "name": "Bob" }},
{ "$lookup": {
"from": "dogs",
"localField": "_id",
"foreignField": "owner",
"as": "dogs"
}}
])