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