5
我試圖從嵌入的數組中刪除一個對象($pull
)。 (使用JavaScript/Node.js的驅動程序)。
這裏是樣本數據,其中一,二,三是層次:
{
one : "All",
one : [
{
name: "People",
two: [
{
three_id: 123,
three: "Jonny",
},
{
three_id: 456,
three: "Bobby",
}
]
},
{
name: "Animals",
two: [
{
three_id: 828,
three: "Cat",
},
{
three_id: 282,
three: "Dog",
}
]
}
]
}
在這個例子中,我試圖擺脫鮑比」 」。
我可以成功地在「三個層次」匹配的文件,如果我想,這樣的:
db.test.find({"one.two.three_id" : 456});
但是,我不知道如何消除使用update
這個紀錄。這裏有一些嘗試,沒有一個工作:
// failed attempts
db.test.update({"one.two.three_id" : 456}, {$pull:{'one.$.two.$.three_id': 456}});
db.test.update({"one.two.three_id" : 456}, {$pull:{'three_id': 456}});
// deletes entire level two "People"
db.test.update({"one.two.three_id" : 456}, {$pull: {one: {two : {$elemMatch: {'three_id': 456}}}}});
我看,你不能使用兩個位置$ operators
,並且你必須知道的第二個索引位置。但是,我想避免使用我想要刪除的嵌入字典的索引。
參考: 的MongoDB在你$pull
對象拉
http://docs.mongodb.org/manual/reference/operator/update/pull/
感謝您的回答。我剛剛嘗試過,但我第100次獲得'$ err:不支持的投影選項:one。$。two,code:13097'我正在使用mongo shell進行測試。 –
忽略我上面的評論。你的解決方案確實有效我再次嘗試了一次,並且失去了一段時間。大。 –
學習筆記:我試圖使用一個簡單的查詢來縮短表達式,並得到以下消息:「不能應用位置運算符而沒有包含數組的相應查詢字段。」所以,查詢設置使用$運算符。 –