findOneAndUpdate不返回MongoDb中的更新文档

时间:2016-09-19 16:58:16

标签: javascript mongodb database

  

我有以下代码来查找和更新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 个答案:

答案 0 :(得分:0)

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

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