为什么findOneAndUpdate
方法在底层使用findAndModify
而不是findOneAndUpdate ?
我需要传递投影设置,但它不起作用,因为findAndModifiy
不采用此类参数,因此它返回整个文档。
例如:
Product
.findOneAndUpdate({
_id: productId,
}, {
$push: {colors: data},
}, {
projection: {
name: 1, 'colors.$': 1,
},
returnNewDocument: true,
})
因为 mongoose 的findOneAndUpdate()
long 早于底层 mongodb 驱动程序中findOneAndUpdate()
的存在,并且驱动程序的findOneAndUpdate()
findAndModify
的薄包装。 此外,驱动程序的findOneAndUpdate()
有几个古怪的语义,特别是与new
选项以及new
和returnNewDocument
之间的区别有关,这对猫鼬来说很麻烦。
投影不起作用是一个问题。 尝试使用“fields”而不是“projection”,因为这是底层findAndModify
函数使用的名称
感谢您的澄清。 是的,我注意到命名上有一些奇怪的差异,例如fields
与projection
和new
与returnNewDocument
。
是的,那里有点混乱,因为每个 API 都想成为它自己的特殊雪花:) 现在 mongodb 驱动程序添加了一个findOneAndUpdate()
函数,它有自己的怪癖,不太确定如何继续使用 mongoose 的 fineOneAndUpdate( )
最有用的评论
是的,那里有点混乱,因为每个 API 都想成为它自己的特殊雪花:) 现在 mongodb 驱动程序添加了一个
findOneAndUpdate()
函数,它有自己的怪癖,不太确定如何继续使用 mongoose 的 fineOneAndUpdate( )