Wenn Sie das Dokument aktualisieren, können Sie die Pipeline innerhalb der Aktualisierung verwenden . Aber diese Funktion ist mit MongoDB Version 4.2 oder höher verfügbar.
db.collection.update(
{ },
[
{
$set: {
arr: {
$cond: [ { $in: [ element, "$arr" ] },
{ $setDifference: [ "$arr", [ element ] ] },
{ $concatArrays: [ "$arr", [ element ] ] }
]
}
}
}
]
)
HINWEIS: Angenommen die Variable element
ist eine Zeichenfolge Wert.
Wenn Sie nur abfragen, können Sie die folgende Aggregation verwenden:
db.collection.aggregate([
{
$addFields: {
arr: {
$cond: [ { $in: [ element, "$arr" ] },
{ $setDifference: [ "$arr", [ element ] ] },
{ $concatArrays: [ "$arr", [ element ] ] }
]
}
}
}
] )
Wenn Sie jedoch eine frühere MongoDB-Version als 4.2 verwenden, können Sie die zusammengefasste Ausgabe von oben verwenden, um das Dokument zu aktualisieren:
db.collection.aggregate( [
// aggregation pipeine from above ...
] ).forEach( doc => db.collection.updateOne( { _id: doc._id }, { $set: { arr: doc.arr } } ) )