Spouští se Mongo 4.2
, db.collection.update()
může přijmout agregační kanál, což nakonec umožní aktualizaci/vytvoření pole založeného na jiném poli:
// { 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 }
-
První část
{}
je vyhledávací dotaz, který filtruje, které dokumenty se mají aktualizovat (v našem případě všechny dokumenty). -
Druhá část
[ { $set: { active: { $eq: [ "$a", "Hello" ] } } } ]
je kanál agregace aktualizací (všimněte si hranatých závorek označujících použití kanálu agregace).$set
je nový agregační operátor a alias$addFields
. Potom lze v rámci$set
použít libovolný agregační operátor etapa; v našem případě podmíněná kontrola rovnosti, na které závisí hodnota, která se má použít pro novýactive
pole. -
Nezapomeňte
{ multi: true }
, jinak bude aktualizován pouze první odpovídající dokument.