在我的 MongoDB 集合中,我有一个遵循父子结构的文档。
每个父文档通常有 4 个字段,子文档有 3 个(无组字段)。
家长:
{
_id: doc_123
parent_id: 123
active: true
group: A
}
孩子们
{
id: doc_123_1
parent_id: 123
active: true
}
{
id: doc_123_2
parent_id: 123
active: true
}
如果我的 Java Spring 项目需要,我想编写一个 BSON 查询/聚合,它将返回与用户提供的以下字段匹配的所有文档:
我的困难在于,假设每个子文档与组字段的父文档具有相同的值,但它实际上并不在文档中。
如何编写一个查询来匹配某个组的所有父文档和子文档?
所有文档都在一个集合中,父文档和子文档没有单独的集合。
聚合步骤:
group
和 active
true/false 进行搜索。
parent_id
自查找同一集合并在 parent_id
上进行匹配
parent_id
对于孩子和父母来说是相同的。id
叫id
还是_id
?但不影响这里的管道。db.collection.aggregate([
{
$match: {
// set this to a variable for true/false search
active: true,
// set this to a variable for group search
// only "parents" have the group
group: "A"
}
},
{
// self-lookup into the same collection, matching on parent_id
$lookup: {
from: "collection",
localField: "parent_id",
foreignField: "parent_id",
as: "children"
}
},
{ $unwind: "$children" },
{ $replaceWith: "$children" },
{
// exclude the parents
// IF YOU WANT PARENTS ALSO THEN REMOVE THIS STAGE
$match: {
group: { $exists: false }
}
}
])