比方说,我有一组称为“狗”的文档,一组称为“所有者”的文档以及每个狗文档中对所有者的引用。
例如:
dog1:
{"_id": "abcdef0123456789",
"name": "Rover",
"owner": ObjectId("1234567890abcdef")}
owner1:
{"_id": "1234567890abcdef",
"name": "Bob"}
因此,以该示例为例,我将如何查找所有所有者名为“鲍勃”的狗。
这是一个现有的数据库,因此我无法更改其存储数据的方式。我坚持使用当前的格式。
答案 0 :(得分:1)
您可以在mongodb 3.6 及更高版本中的$lookup
聚合以下尝试
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"
}}
])