我想在集合中的某些文档之间创建依赖关系。 例如,我有文档A,并且我想在文档B中使用它的某些字段作为小节。因此,如果我更改文档A,则文档B中的字段也会更改。
以下是有关实际JSON的更好解释: 这是文件A
{
"_id": ObjectId("1"),
"value": 10,
"name": "A_document_name",
"owner": "some_owner"
}
这是文件B
{
"_id": ObjectId("2"),
"description": "some_description",
"valid": true,
"name": "some_name",
"items": [
{
"id": "1",
"name": "A_object_name"
}
]
}
现在,我想发生的是,如果我更改文档A的名称,我希望看到它在文档B的项目部分中也发生了更改。当前,当我更改A的名称时,它仅在A中更改自创建以来,B保持不变。在Mongo中可以实现吗?如何在B中的items
部分与A之间创建引用?我是否需要更改文档结构中的某些内容?
答案 0 :(得分:4)
您需要使用mongoDB的$lookup
您将使用一个唯一的标识符来匹配文档,
例如:
A
文档为:
{
"_id": ObjectId("1"),
"b_id": ObjectId("2"),
"value": 10,
"name": "A_document_name",
"owner": "some_owner"
}
B
文档只是:
{
"_id": ObjectId("2"),
"description": "some_description",
"valid": true,
"name": "some_name"
}
然后,您将像这样进行汇总查询:
db.B.aggregate([
{
$lookup:
{
from: "A", //The collection you're getting the items from
localField: "_id", //The local field you're using to lookup
foreignField: "b_id", //The field the `A` document you're using to match
as: "items" //The name of the field that will be populated with the results
}
}
])
aggregate可以做很多事情,花一点时间浏览文档。让我知道是否有帮助。