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 レベルのみに制限されていますか?

4

1 に答える 1

0

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

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

この問題はこちらでより明確に説明されていると思います

于 2016-09-04T15:03:46.133 に答える