Стартиране на Mongo 4.2
, db.collection.update()
може да приеме конвейер за агрегиране, като накрая позволява актуализирането/създаването на поле въз основа на друго поле:
// { a: "Hello", b: "World" }
// { a: "Olleh", b: "Dlrow" }
db.collection.update(
{},
[ { $set: { active: { $eq: [ "$a", "Hello" ] } } } ],
{ multi: true }
)
// { a: "Hello", b: "World", active: true }
// { a: "Olleh", b: "Dlrow", active: false }
-
Първата част
{}
е заявката за съответствие, която филтрира кои документи да актуализира (в нашия случай всички документи). -
Втората част
[ { $set: { active: { $eq: [ "$a", "Hello" ] } } } ]
е тръбопроводът за обновяване на агрегиране (обърнете внимание на квадратните скоби, означаващи използването на конвейер за агрегиране).$set
е нов оператор за агрегиране и псевдоним на$addFields
. Тогава всеки оператор за агрегиране може да се използва в рамките на$set
сцена; в нашия случай проверка на условно равенство, от която зависи стойността, която да се използва за новияactive
поле. -
Не забравяйте
{ multi: true }
, в противен случай само първият съответстващ документ ще бъде актуализиран.