¿Por qué el método findOneAndUpdate
usa findAndModify
debajo del capó en lugar de findOneAndUpdate ?
Necesito pasar la configuración de proyección, pero no funciona porque findAndModifiy
no toma dichos parámetros y, como tal, devuelve el documento completo.
P.ej:
Product
.findOneAndUpdate({
_id: productId,
}, {
$push: {colors: data},
}, {
projection: {
name: 1, 'colors.$': 1,
},
returnNewDocument: true,
})
Porque el findOneAndUpdate()
de mongoose es anterior a la existencia de findOneAndUpdate()
en el controlador mongodb subyacente, y el findOneAndUpdate()
del controlador es solo una envoltura delgada alrededor findAndModify
todos modos. Además, el findOneAndUpdate()
del controlador tiene varias semánticas peculiares, especialmente relacionadas con la opción new
y la diferencia entre new
y returnNewDocument
, que son problemáticas para la mangosta.
Las proyecciones que no funcionan son un pequeño problema. Intente usar 'campos' en lugar de 'proyección', porque ese es el nombre que usa la función subyacente findAndModify
Gracias por aclararlo. Sí, noté que había algunas diferencias extrañas en los nombres, por ejemplo, fields
frente a projection
y new
frente a returnNewDocument
.
Sí, hay un poco de confusión porque cada API quiere ser su propio copo de nieve especial :) Ahora que el controlador mongodb agregó una función findOneAndUpdate()
que tiene sus propias peculiaridades, aún no estoy seguro de cómo proceder con fineOneAndUpdate de mongoose ( )
Comentario más útil
Sí, hay un poco de confusión porque cada API quiere ser su propio copo de nieve especial :) Ahora que el controlador mongodb agregó una función
findOneAndUpdate()
que tiene sus propias peculiaridades, aún no estoy seguro de cómo proceder con fineOneAndUpdate de mongoose ( )