Si vous mettez à jour le document, vous pouvez utiliser le pipeline dans la mise à jour . Mais cette fonctionnalité est disponible avec MongoDB version 4.2 ou ultérieure.
db.collection.update(
{ },
[
{
$set: {
arr: {
$cond: [ { $in: [ element, "$arr" ] },
{ $setDifference: [ "$arr", [ element ] ] },
{ $concatArrays: [ "$arr", [ element ] ] }
]
}
}
}
]
)
REMARQUE : En supposant la variable element
est une chaîne valeur.
Si vous ne faites qu'interroger, vous pouvez utiliser l'agrégation suivante :
db.collection.aggregate([
{
$addFields: {
arr: {
$cond: [ { $in: [ element, "$arr" ] },
{ $setDifference: [ "$arr", [ element ] ] },
{ $concatArrays: [ "$arr", [ element ] ] }
]
}
}
}
] )
Mais, si vous utilisez une version de MongoDB antérieure à la 4.2, vous pouvez utiliser la sortie agrégée ci-dessus pour mettre à jour le document :
db.collection.aggregate( [
// aggregation pipeine from above ...
] ).forEach( doc => db.collection.updateOne( { _id: doc._id }, { $set: { arr: doc.arr } } ) )