findOneAndUpdate 未在 MongoDb 中返回更新的文档 [重复]

Posted

技术标签:

【中文标题】findOneAndUpdate 未在 MongoDb 中返回更新的文档 [重复]【英文标题】:findOneAndUpdate not returning updated document in MongoDb [duplicate] 【发布时间】:2017-01-27 10:46:38 【问题描述】:

我有以下代码来查找和更新 MongoDb 中嵌入文档的字段。

var fieldToIncrement =  $inc:  ;
        fieldToIncrement.$inc['options_counter.'+field[0]] = 1;
        console.log(fieldToIncrement);

        db.collection('polls').findOneAndUpdate(
            _id: user_id,
            fieldToIncrement, 
            
                returnNewDocument: true
            , function(err, doc)
                if(err)console.log("Error updating the document");
                if(doc)
                    callback(doc);
                
            
        )

我的数据结构是这样的

_id:"57e0149dcb0b20156878598d"
options:"osgn, srgounsrog, snourv"
options_counter:Object
0:0
1:0
2:0

代码中的变量字段是一个数组,其中包含一个元素,该元素引用了我要更新的 options_counter 对象的哪个字段。但是,返回的文档没有任何更新,也没有返回错误。我试着改变了

fieldToIncrement.$inc['options_counter.'+field[0]] = 1;

fieldToIncrement.$inc['opt_counter.'+field[0]] = 1;

它仍然没有返回错误。这意味着我不是 正确实现代码,因为 opt_counter 不是 我的文档,因此它应该返回一个错误。

【问题讨论】:

【参考方案1】:

当你在不存在的错误字段上调用它时它不会返回错误,$inc 会创建一个名称为 0 的字段,然后将其递增 1。

在更新调用之后,如果您的字段值没有改变(即使是错误的字段),您可能需要使用 find(_id: user_id) 调用查询并查看它是否返回数据,有时我们将_id存储为ObjectId并通过String值查询它,由于类型不匹配,它不会选择文档。

【讨论】:

以上是关于findOneAndUpdate 未在 MongoDb 中返回更新的文档 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

findOneAndUpdate 未在 MongoDb 中返回更新的文档 [重复]

Mongoose:通过 findOneAndUpdate 查询使用对象数组的总和更新根数据属性不起作用

使用外部 API 调用和 findOneAndUpdate 循环结果

Mongoose FindOneAndUpdate 嵌入对象并返回父对象

将 findOne 和 findOneAndUpdate 与 HTTP 请求一起使用(猫鼬)

Mongoose:通过 findOneAndUpdate 查询使用嵌套对象数组的总和更新父子数据属性不起作用