これは私の MongoDB クエリです。
db.events.update({date:{$gte: ISODate("2014-09-01T00:00:00Z")}},{$set:{"artists.$.soundcloud_toggle":false}},{multi:true,upsert:false})
どうやら、「artists.$.soundcloud_toggle」を使用して、artists 配列内のすべてのアーティスト ドキュメントを更新することはできません。
「$ 演算子は、$elemMatch() 演算子で指定された複数のクエリ条件に一致する最初の配列要素を更新できます。http: //docs.mongodb.org/manual/reference/operator/update/positional/」
クエリに一致するすべてのイベントですべてのアーティストの soundcloud_toggle プロパティを設定するために、配列のインデックスを変更してクエリを何度も実行できてうれしいです。
artists.0.soundcloud_toggle
artists.1.soundcloud_toggle
artists.2.soundcloud_toggle
artists.3.soundcloud_toggle
問題は、たとえば、アーティスト配列にアーティスト ドキュメントが 1 つしかない場合、"artists.1.soundcloud_toggle" でクエリを実行すると、単一のプロパティを持つアーティスト ドキュメントがアーティスト配列に挿入されます。
{
"soundcloud_toggle" : true
},
(私は "upsert:false" を宣言しましたが、これはデフォルトで false になっているはずです)
既存のドキュメントがない場合に、クエリがドキュメントを挿入して soundcloud_toggle:false を設定しないようにするにはどうすればよいですか? 指定されたアーティスト配列インデックスにアーティストが存在する場合にのみ、プロパティを更新したいと考えています。