0

私が尋ねている質問の複数のインスタンスを見てきましたが、どれも私の問題を解決していないようです。

私はスキーマを持つドキュメントのコレクションを持っています:

{
 _id:someId,
 brands:[
 {_id:1,name:Nike,products:[]},
 {_id:2,name:Reebok,products:[]}     
 ]
}

私がしたいのは、配列要素のいずれかが一致する場合に配列フィールドを更新することです。それ以外の場合は、ブランド配列に新しいオブジェクトを挿入します。

これまでのところ、私はこれに出くわしました:

  var args = {
      'query': {_id:someId,"brands._id":someBrandId,}
    , 'update': {
      "$set": {
        'brands.$.products':req.tempStore.products
      }
    },
    , 'upsert':true
  };

そして、私はnodejsドライバーを使用しており、以下を使用しました:

db.companies.findAndModify(args,function(err,document){
 if(err) return next(err);
 //some other logic here

})

上記を実行すると、ブランド配列内にオブジェクトが存在することがわかった場合、正常に更新されますが、そうでない場合は次のエラーが発生します。

配列を含む対応するクエリ フィールドがないと、位置演算子を適用できません

配列フィールドに新しい値が存在しない場合に追加する方法がわかりません。

4

0 に答える 0