2016-09-04 27 views
0

我在mongodb中使用子文檔。對多級子文檔使用位置運算符

隨着子文檔的一個水平,我可以更新

Parent.findOneAndUpdate({ _id: parentId, 'children._id': childId }, { 
    $set: { 
    'children.$.name': name 
    } 
}, (err, doc) => { 
    ... 
}); 

文件,但我必須做同樣的子文件另一個層面,即

Parent.findOneAndUpdate({ _id: parentId, 'children._id': childId, 'children.grandchildren._id': grandchildId }, { 
    $set: { 
    'children.$.grandchildren.$.name': name 
    } 
}, (err, doc) => { 
    ... 
}); 

是位置問題運算符($)僅限於1級子文檔?

回答

0

位置運算符($)僅支持一個級別,也是第一個匹配元素。作爲一種變通方法,你可以做,這是什麼,

$set: { 'children.$.grandchildren.0.name': name }

我認爲這個問題是比較清楚的解釋here

+0

哦。謝謝。但是,你的解決方法是不是隻將第一個對象放在孫子陣列中,而不是與我的'grandchildId'匹配的對象? – Jamgreen

+0

是的,它會選擇你剛剛提到的第一個對象。但是,您可以使用mongodb的** foreach **函數並更新與「grandchildId」匹配的每個孫名稱。我提供的鏈接也提供了一個可供您參考的答案。 [這是該答案的鏈接](http://stackoverflow.com/a/18721690/4334340) –