2016-09-04 1 views
0

私はmongodbでサブ文書を使用しています。サブ文書の1つのレベルで複数レベルのサブ文書に対して位置演算子を使用する

、私は

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

位置演算子($)は、1つのレベルと最初に一致する要素のみをサポートします。あなたは何ができるか回避策は、この、

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

であるように私はこの問題がより明確にhere

+0

ああを説明されていると思います。ありがとう。しかし、あなたの回避策は、私の「孫」と一致するものの代わりに、孫の配列の最初のオブジェクトを取るだけではありませんか? – Jamgreen

+0

はい、あなたが言及したように、最初のオブジェクトを選択します。しかし、あなたはmongodbの** foreach **関数を使い、 'grandchildId'と一致する各孫の名前を更新することができます。私が私の答えと共に提供したリンクには、あなたが参照することができる答えが1つあります。 [これはその答えのリンクです](http://stackoverflow.com/a/18721690/4334340) –

関連する問題