【问题标题】:findOneAndUpdate not returning updated document in MongoDb [duplicate]findOneAndUpdate 未在 MongoDb 中返回更新的文档 [重复]
【发布时间】: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 不是 我的文档,因此它应该返回一个错误。

【问题讨论】:

    标签: javascript mongodb database


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-01-29
      • 2019-07-20
      • 1970-01-01
      • 1970-01-01
      • 2022-08-02
      • 1970-01-01
      • 1970-01-01
      • 2014-09-04
      • 2016-10-15
      相关资源
      最近更新 更多