本小白前几天在项目中用到mongo的findOneAndUpdate,使用过程中碰到一些坑,先总结如下:
用法:
db.collection.findOneAndUpdate(
<filter>,
<update document or aggregation pipeline>, // Changed in MongoDB 4.2
{
projection: <document>,
sort: <document>,
maxTimeMS: <number>,
upsert: <boolean>,
returnNewDocument: <boolean>,
collation: <document>,
arrayFilters: [ <filterdocument1>, ... ]
}
)
注:1. filter是一个document类型,类似一个find查找的条件。
2. update是一个document类型或者array类型。
例子:
{
_id: 6305, name : "A. MacDyver", "assignment" : 5, "points" : 24 },
{
_id: 6308, name : "B. Batlock", "assignment" : 3, "points" : 22 },
{
_id: 6312, name : "M. Tagnum", "assignment" : 5, "points" : 30 },
{
_id: 6319, name : "R. Stiles", "assignment" : 2, "points" :

在项目中使用MongoDB的findOneAndUpdate时遇到坑点,主要涉及到upsert选项和多条件过滤的问题。当upsert设为true,且部分条件满足时,可能导致唯一键冲突。正确做法应先检查_id是否存在,再决定upsert的值。同时,当部分条件不满足时,可能导致更新失败。总结经验,使用findOneAndUpdate需谨慎处理过滤条件和更新逻辑。
最低0.47元/天 解锁文章
5631

被折叠的 条评论
为什么被折叠?



