Startar Mongo 4.2
, db.collection.update()
kan acceptera en aggregeringspipeline, vilket slutligen tillåter uppdatering av ett fält baserat på dess nuvarande värde:
// { a: "Hello" }
db.collection.update(
{},
[{ $set: { a: { $concat: [ "$a", "World" ] } } }],
{ multi: true }
)
// { a: "HelloWorld" }
-
Den första delen
{}
är matchningsfrågan som filtrerar vilka dokument som ska uppdateras (i detta fall alla dokument). -
Den andra delen
[{ $set: { a: { $concat: [ "$a", "World" ] } } }]
är uppdateringsaggregationspipeline (observera att hakparenteserna anger användningen av en aggregationspipeline).$set
(alias för$addFields
) är en ny aggregeringsoperator som i det här fallet ersätter fältets värde (genom att sammanfogaa
sig själv med suffixet"World"
). Notera hura
modifieras direkt baserat på sitt eget värde ($a
). -
Glöm inte
{ multi: true }
, annars kommer bara det första matchande dokumentet att uppdateras.