$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つの更新コマンドを組み合わせることができます。