【发布时间】:2016-09-19 14:08:36
【问题描述】:
所以,关于我正在尝试创建的内容的一些背景知识。我正在尝试构建一个投票应用程序,其中 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 变量会返回一个错误,提示找不到未定义的属性字段。变量字段包含指定 options_counter 对象的特定键的数字,该对象需要递增 1。我已将 options_counter 嵌入到原始文档中。我的问题是如何设置语法,以便 MongoDb 可以在 options_counter 对象中找到要更新的特定键值对,并将该计数器增加 1?
【问题讨论】:
-
有几个问题,但首先要调用
console.log(fieldToIncrement)来显示它的价值。它可能不是你想的那样。 -
因此,当我使用上述语法定义 fieldToIncrement 时,它会返回错误,因为我显然是在尝试访问未定义对象的属性。我尝试将其更改为仅 options_counter.field,但这也会返回错误,因为无法在数据库外部访问 options_counter。您看到的其他错误是什么?
标签: javascript node.js mongodb database