私が尋ねている質問の複数のインスタンスを見てきましたが、どれも私の問題を解決していないようです。
私はスキーマを持つドキュメントのコレクションを持っています:
{
_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
})
上記を実行すると、ブランド配列内にオブジェクトが存在することがわかった場合、正常に更新されますが、そうでない場合は次のエラーが発生します。
配列を含む対応するクエリ フィールドがないと、位置演算子を適用できません
配列フィールドに新しい値が存在しない場合に追加する方法がわかりません。