如何使用变量字段名称来增加mongodb字段?
所以,我想创建一个小背景。我正在尝试构建一个投票应用程序,其中MongoDb数据库存储了每个选项的选项和计数器,以检查人们为每个选项投了多少次票。我已经实现的数据结构如下所示。如何使用变量字段名称来增加mongodb字段?
_id:"57dfecfa3832360f46e183c2"
options:"iea, aoegboae, aoeugoa, ougr, gege"
options_counter:Object
0:0
1:0
2:0
3:0
4:0
__proto__:Object
title:"hr"
每个这些数字[0,1,2,3,4]的代表一个选项,数结肠表示每个计数器之后。我的功能更新所需的反如下所示
var fieldToIncrement = db.collection('polls').options_counter.field;
db.collection('polls').findOneAndUpdate(
{_id: user_id},
{$inc: {fieldToIncrement: 1}},
{upsert:false},
{returnNewDocument: true}
).toArray(function(err, doc){
if(err){
throw new Error(err);
}if(doc){
console.log(doc);
//callback(null, doc);
}
});
然而,使用fieldToIncrement变量返回一个错误,指出无法找到的未定义的属性字段。变量字段包含指定需要递增1的options_counter对象的特定键的数字。我已将options_counter嵌入原始文档中。我的问题是如何设置语法,以便MongoDb可以找到options_counter对象内的特定键值对来更新,并将该计数器增加1?
它看起来像“options_counter”是一个嵌入式文档,因此您var var fieldToIncrement必须是类似options_count.0。 我在你的问题中看不到这个。
请分享你的代码,在你定义fieldToIncrement的地方,现在看起来没有定义,同样在你提到的错误中声明:“但是,使用fieldToIncrement变量返回一个错误,说找不到未定义的属性字段。
我在第二块代码的第一行中定义了它。 var fieldToIncrement = db.collection('polls')。options_counter.field; 我尝试了你的建议方法,但是也返回一个错误,因为options_counter只能在db.collection函数内部访问 –
你必须把它改成类似于:var fieldToIncrement = {$ inc:{options_counter.0:1}} 。在更新中使用该变量而不是{inc .....}行。 – HoefMeistert
所以,我做到了。但是,它似乎对文档没有任何影响。文档确实返回,但没有看到更新的效果。 –
有几个问题,但从调用'console.log(fieldToIncrement)'开始显示其值。这可能不是你的想法。 – JohnnyHK
因此,当我使用上述语法来定义fieldToIncrement时,它会返回一个错误,因为我显然试图访问未定义对象的属性。我试着将它改为options_counter.field,但也返回一个错误,因为options_counter不能在数据库之外访问。你看到的其他错误是什么? –