我有以下代码来查找和更新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不是一个字段 我的文档,因此它应该返回错误。
答案 0 :(得分:0)
当你在错误的字段上调用它时不会返回错误,$ inc会创建一个名称为0的字段,然后将其递增1.
更新后调用如果你的字段值没有改变(即使字段错误)你可能需要用find({_ id:user_id})调用查询并查看它是否正在返回数据,有时我们将_id存储为ObjectId并按字符串值查询,由于类型不匹配,它不会选择文档。