1
我在MongoDB中存储了一些树状结构的数据。它看起来像这样:在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投影(当前不支持))。
数组不能给予的MongoDB多的爱。你需要重组你的文件。 – WiredPrairie