Nếu bạn đang cập nhật tài liệu, bạn có thể sử dụng đường dẫn trong cập nhật . Nhưng tính năng này khả dụng với MongoDB phiên bản 4.2 trở lên.
db.collection.update(
{ },
[
{
$set: {
arr: {
$cond: [ { $in: [ element, "$arr" ] },
{ $setDifference: [ "$arr", [ element ] ] },
{ $concatArrays: [ "$arr", [ element ] ] }
]
}
}
}
]
)
LƯU Ý: Giả sử biến element
là một chuỗi giá trị.
Nếu bạn chỉ đang truy vấn, bạn có thể sử dụng kết hợp sau:
db.collection.aggregate([
{
$addFields: {
arr: {
$cond: [ { $in: [ element, "$arr" ] },
{ $setDifference: [ "$arr", [ element ] ] },
{ $concatArrays: [ "$arr", [ element ] ] }
]
}
}
}
] )
Tuy nhiên, nếu bạn đang sử dụng phiên bản MongoDB cũ hơn 4.2, thì bạn có thể sử dụng kết quả tổng hợp từ phía trên để cập nhật tài liệu:
db.collection.aggregate( [
// aggregation pipeine from above ...
] ).forEach( doc => db.collection.updateOne( { _id: doc._id }, { $set: { arr: doc.arr } } ) )