Допустим, у нас есть простой документ:
{
array: ["a", "b", "c", "d"]
}
Как изменить значение second в агрегации ?
С update
это очень просто:
db.collection.updateOne({},
{ $set: { "array.1": "B" } }
)
дает:
{
array: ["a", "B", "c", "d"]
}
В структуре агрегации вы можете использовать это:
db.collection.aggregate([
{
$set: {
"array": {
$map: {
input: "$array",
in: {
$cond: {
if: { $eq: [{ $indexOfArray: ["$array", "$$this"] }, 1] },
then: "B",
else: "$$this"
}
}
}
}
}
}
])
Однако это не удается, когда массив не является множеством, то есть значения не являются уникальными, как этот
{
array: ["a", "b", "c", "b"]
}