ドキュメントを更新する場合は、 update内でパイプラインを使用できます 。ただし、この機能はMongoDBバージョン4.2以降で使用できます。
db.collection.update(
{ },
[
{
$set: {
arr: {
$cond: [ { $in: [ element, "$arr" ] },
{ $setDifference: [ "$arr", [ element ] ] },
{ $concatArrays: [ "$arr", [ element ] ] }
]
}
}
}
]
)
注: 変数element
を想定 文字列です 価値。
クエリを実行するだけの場合は、次の集計を使用できます。
db.collection.aggregate([
{
$addFields: {
arr: {
$cond: [ { $in: [ element, "$arr" ] },
{ $setDifference: [ "$arr", [ element ] ] },
{ $concatArrays: [ "$arr", [ element ] ] }
]
}
}
}
] )
ただし、4.2より前のバージョンのMongoDBを使用している場合は、上記の集計出力を使用してドキュメントを更新できます。
db.collection.aggregate( [
// aggregation pipeine from above ...
] ).forEach( doc => db.collection.updateOne( { _id: doc._id }, { $set: { arr: doc.arr } } ) )