findOneAndUpdate
メソッドがfindOneAndUpdateの代わりに内部でfindAndModify
を使用するのはなぜですか?
投影設定を渡す必要がありますが、 findAndModifiy
がそのようなパラメーターを受け取らず、ドキュメント全体を返すため、機能しません。
例えば:
Product
.findOneAndUpdate({
_id: productId,
}, {
$push: {colors: data},
}, {
projection: {
name: 1, 'colors.$': 1,
},
returnNewDocument: true,
})
マングースのfindOneAndUpdate()
$は、基になるmongodbドライバーにfindOneAndUpdate()
が存在するよりもずっと前から存在しているため、ドライバーのfindOneAndUpdate()
は、とにかくfindAndModify
の薄いラッパーにすぎません。 また、ドライバーのfindOneAndUpdate()
には、特にnew
オプションと、 new
とreturnNewDocument
の違いに関連する、いくつかの風変わりなセマンティクスがあります。これは、マングースにとって厄介です。
投影が機能しないのは少し問題です。 基になるfindAndModify
関数が使用する名前であるため、「projection」の代わりに「fields」を使用してみてください
明確にしていただきありがとうございます。 はい、名前に奇妙な違いがあることに気づきました。たとえば、 fields
とprojection
、 new
とreturnNewDocument
などです。
ええ、すべてのAPIが独自の特別なスノーフレークになりたいので、少し混乱があります:)これで、mongodbドライバーが独自の癖を持つfindOneAndUpdate()
関数を追加しましたが、mongooseのfineOneAndUpdate( )。
最も参考になるコメント
ええ、すべてのAPIが独自の特別なスノーフレークになりたいので、少し混乱があります:)これで、mongodbドライバーが独自の癖を持つ
findOneAndUpdate()
関数を追加しましたが、mongooseのfineOneAndUpdate( )。