Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在MongoDB中查找并替换子数组元素_Arrays_Mongodb_Meteor_Multidimensional Array - Fatal编程技术网

Arrays 在MongoDB中查找并替换子数组元素

Arrays 在MongoDB中查找并替换子数组元素,arrays,mongodb,meteor,multidimensional-array,Arrays,Mongodb,Meteor,Multidimensional Array,嗨,我正在开发MeteorJS应用程序,我一直在更新子数组元素 这是一个轮询应用程序,我有以下数据库结构: 每个问题下都有选项,当用户单击某个选项的按钮时,我想增加一个选项的投票权,每个用户对每个问题都应该有一个投票权 通过按钮,我传递name和questionId数据,以便找到正确的递增投票选项。我应该找到带有questionId的特定问题,然后在选项下找到带有名称的特定数组 我被困的地方是我找不到它 请帮忙,谢谢 集合名称:投票 每个投票具有以下结构: { “_id”:“uJtBt8mM2

嗨,我正在开发MeteorJS应用程序,我一直在更新子数组元素

这是一个轮询应用程序,我有以下数据库结构:

每个问题下都有选项,当用户单击某个选项的按钮时,我想增加一个选项的投票权,每个用户对每个问题都应该有一个投票权

通过按钮,我传递name和questionId数据,以便找到正确的递增投票选项。我应该找到带有questionId的特定问题,然后在选项下找到带有名称的特定数组

我被困的地方是我找不到它

请帮忙,谢谢

集合名称:投票

每个投票具有以下结构:

{
“_id”:“uJtBt8mM2pbTYfwND”,
“createdAt”:ISODate(“2017-04-03T22:40:14.678Z”),
“轮询名称”:“第一次轮询”,
“入口所有者”:“gdAHxDrxFuTvYiFt8”,
“问题”:[
{
“姓名”:“问题编号1”,
“问题ID”:“xgYQxGxpwBXaQpjXN”,
“期权”:[
{
“姓名”:“约翰”,
“投票数”:0
}, 
{
“姓名”:“亚当”,
“投票数”:0
}, 
{
“姓名”:“罗伯特”,
“投票数”:0
}
]
}, 
{
“姓名”:“问题编号2”,
“问题ID”:“zviwYHHsaATBdG6Jw”,
“期权”:[
{
“姓名”:“约翰”,
“投票数”:0
}, 
{
“姓名”:“亚当”,
“投票数”:0
}, 
{
“姓名”:“罗伯特”,
“投票数”:0
}
]
}
],

}
您可以使用$and,它对两个或多个表达式的数组执行逻辑and操作

{ $and: [ { <expression1> }, { <expression2> } , ... , { <expressionN> } ] }
和第二个表达式,用于指定选项数组中具有匹配名称的对象。 要在选项数组中查找名称为的对象,可以使用$elemMatch,它允许指定查询

{ <field>: { $elemMatch: { <query1>, <query2>, ... } } }
最后,使用$inc增加投票数(此处为1)。 它将获得第一个匹配元素(带有$)

以下是完整的代码:

db.Polls.update({
    $and: [{
            'question.questionId': "xgYQxGxpwBXaQpjXN"
        },
        {
            'question.options': {
                $elemMatch: {
                    name: "John"
                }
            }
        }
    ]
}, {
    $inc: {
        'question.options.$.votes': 1
    }
})

在堆栈溢出中,仅编写代码是不够的。请对代码进行注释和解释。非常感谢您的解释,问题是运行此代码时,它不知道问题的索引,因此无法更新投票。我通过安装underline.js库并在单击按钮时查找每个项索引来解决这个问题。
'question.options': {
    $elemMatch: {
        name: "John"
    }
}
'question.options.$.votes': 1
db.Polls.update({
    $and: [{
            'question.questionId': "xgYQxGxpwBXaQpjXN"
        },
        {
            'question.options': {
                $elemMatch: {
                    name: "John"
                }
            }
        }
    ]
}, {
    $inc: {
        'question.options.$.votes': 1
    }
})