Por que o método findOneAndUpdate
está usando findAndModify
nos bastidores em vez de findOneAndUpdate ?
Eu preciso passar as configurações de projeção, mas não está funcionando porque findAndModifiy
não aceita esses parâmetros e, como tal, está retornando o documento inteiro.
Por exemplo:
Product
.findOneAndUpdate({
_id: productId,
}, {
$push: {colors: data},
}, {
projection: {
name: 1, 'colors.$': 1,
},
returnNewDocument: true,
})
Porque o findOneAndUpdate()
long do mangusto antecede a existência de findOneAndUpdate()
no driver mongodb subjacente, e o findOneAndUpdate()
do driver é apenas um invólucro fino em torno findAndModify
qualquer maneira. Além disso, o findOneAndUpdate()
do driver tem várias semânticas peculiares, especialmente relacionadas à opção new
e a diferença entre new
e returnNewDocument
, que são problemáticas para o mangusto.
Projeções que não funcionam são um problema. Tente usar 'campos' em vez de 'projeção', porque esse é o nome que a função findAndModify
subjacente usa
Obrigado por esclarecer. Sim, notei que havia algumas diferenças estranhas na nomenclatura, por exemplo, fields
vs projection
e new
vs returnNewDocument
.
Sim, há uma pequena confusão lá porque cada API quer ser seu próprio floco de neve especial :) Agora que o driver mongodb adicionou uma função findOneAndUpdate()
que tem suas próprias peculiaridades, ainda não tenho certeza de como proceder no fineOneAndUpdate do mongoose ( )
Comentários muito úteis
Sim, há uma pequena confusão lá porque cada API quer ser seu próprio floco de neve especial :) Agora que o driver mongodb adicionou uma função
findOneAndUpdate()
que tem suas próprias peculiaridades, ainda não tenho certeza de como proceder no fineOneAndUpdate do mongoose ( )