我在 MongoDB 中存储了一些树结构的数据。它看起来像这样:
{
"_id": 1,
"name": "foo",
"subs": [{
"name": "bar",
"subs": [{
"name": "baz"
},
{
"name": "gizmo"
}]
}]
}
{
"_id": 2,
"name": "foo",
"subs": [{
"name": "bar",
"subs": [{
"name": "gizmo"
}]
}]
}
我想查询子树,并且只希望提取与查询匹配的树部分。在每个节点中,最多有一个与查询匹配的子树。
在这个测试查询中,我想找到与路径“foo/bar/gizmo”匹配的树部分。所以,我尝试了以下方法:
db.Test.find({
name: "foo",
subs: {
$elemMatch: {
name: "bar",
subs: {
$elemMatch: {
name: "gizmo"
}
}
}
}
},
{
"subs.subs": {
$slice: 1
}
})
我得到的结果是
{
"_id": 1,
"name": "foo",
"subs": [{
"name": "bar",
"subs": [{
"name": "baz"
}]
}]
}{
"_id": 2,
"name": "foo",
"subs": [{
"name": "bar",
"subs": [{
"name": "gizmo"
}]
}]
}
而我实际上想要
{
"_id": 1,
"name": "foo",
"subs": [{
"name": "bar",
"subs": [{
"name": "gizmo"
}]
}]
}{
"_id": 2,
"name": "foo",
"subs": [{
"name": "bar",
"subs": [{
"name": "gizmo"
}]
}]
}
是否有可能做到这一点?我曾尝试在子树上使用$elemMatch
投影运算符,但似乎 Mongo 目前不支持它(不能在嵌套字段上使用 $elemMatch 投影(当前不受支持))。