$addToSetを使用します $pushの代わりに 。
db.push.update(
{ _id: 5 },
{ $addToSet: { "quizzes": {"wk": 6.0, "score": 8.0}, "play": {"wk": 6.0, "score": 8.0} } }
)
編集:
特定のプロパティによる、配列フィールドの条件付きサブドキュメント更新のための単純な組み込みアプローチはありません。ただし、2つのコマンドを順番に実行することで、小さなトリックで作業を行うことができます。
例:quizzesを更新する場合 オブジェクトのあるフィールド{ "wk": 7.0, "score": 8.0 } 、2つのステップで実行できます:
ステップ1: $pull quizzesからサブドキュメントを取り出します "wk": 7.0の配列 。 (一致するサブドキュメントが見つからない場合は何も起こりません 。
db.push.update(
{ _id: 5 },
{ $pull: { "quizzes": { "wk": 7.0 } } }
)
ステップ2: $addToSet サブドキュメント。
db.push.update(
{ _id: 5 },
{ $addToSet: { "quizzes": {"wk": 7.0, "score": 8.0} } }
)
bulk.find().update()を使用して、上記の2つの更新コマンドを組み合わせることができます。