Pourquoi la méthode findOneAndUpdate
utilise-t-elle findAndModify
sous le capot au lieu de findOneAndUpdate ?
J'ai besoin de passer les paramètres de projection mais cela ne fonctionne pas car findAndModifiy
ne prend pas de tels paramètres, et en tant que tel, il renvoie le document entier.
Par exemple:
Product
.findOneAndUpdate({
_id: productId,
}, {
$push: {colors: data},
}, {
projection: {
name: 1, 'colors.$': 1,
},
returnNewDocument: true,
})
Parce que le findOneAndUpdate()
de mongoose est antérieur à l'existence de findOneAndUpdate()
dans le pilote mongodb sous-jacent, et que le findOneAndUpdate()
du pilote n'est qu'un fin wrapper autour findAndModify
toute façon. En outre, le findOneAndUpdate()
du pilote a plusieurs sémantiques bizarres, en particulier liées à l'option new
et à la différence entre new
et returnNewDocument
, qui sont gênantes pour la mangouste.
Les projections qui ne fonctionnent pas sont un peu un problème. Essayez d'utiliser 'champs' au lieu de 'projection', car c'est le nom que la fonction sous-jacente findAndModify
utilise
Merci de clarifier. Oui, j'ai remarqué qu'il y avait des différences étranges dans les noms, par exemple fields
vs projection
et new
vs returnNewDocument
.
Ouais, il y a un peu de confusion là-bas parce que chaque API veut être son propre flocon de neige spécial :) Maintenant que le pilote mongodb a ajouté une fonction findOneAndUpdate()
qui a ses propres bizarreries, je ne sais pas encore comment procéder sur fineOneAndUpdate de mongoose( )
Commentaire le plus utile
Ouais, il y a un peu de confusion là-bas parce que chaque API veut être son propre flocon de neige spécial :) Maintenant que le pilote mongodb a ajouté une fonction
findOneAndUpdate()
qui a ses propres bizarreries, je ne sais pas encore comment procéder sur fineOneAndUpdate de mongoose( )