Eu escrevi este pipeline agregado. Quero atualizar os documentos que correspondem a este pipeline e ser atualizados de acordo com as etapas. Estou assumindo que $replaceRoot fará isso. Estou incorreto. Só quero saber se o pipeline agregado pode atualizar os documentos ou não. Se sim, é uma prática recomendada ou um hack. E não quero usar o operador $out.
[
{ $match: { name: "awss3-metadata-loader" } },
{
$set: {
tags: {
$cond: {
if: {
$in: [{ $type: "$tags" }, ["null"]],
},
then: [
{
k: "awss3metadataloader",
v: "new",
},
],
else: {},
},
},
},
},
{ $replaceRoot: { newRoot: "$$ROOT" } },
]```
Sim, isso é possível. Você pode usar
db.collection.updateMany({<filter>}, [<pipeline>])
oudb.collection.updateOne()
Seria
Observe que o pipeline deve conter apenas os seguintes estágios de agregação:
$addFields
e seu apelido$set
$project
e seu apelido$unset
$replaceRoot
e seu apelido$replaceWith
Qual é o caso do seu exemplo.
Consulte Atualização com um pipeline de agregação
Ou você pode usar o operador $merge .