我很难弄清楚如何在数组中增加对象的值
例如,我有一个基于Poll
模式的文档:
{
"_id": "584b2cc6817758118e9557d8",
"title": "Number of Skittles",
"description": "Test1",
"date": "Dec 9, 2016",
"__v": 0,
"labelOptions": [
{
"Bob": 112
},
{
"Billy": 32
},
{
"Joe": 45
}
]
}
使用Express,我可以做到这一点:
app.put('/polls/:id', function(req, res){
let id = req.params.id;
let labelOption = req.query.labelOption;
Poll.findOneAndUpdate(
{'_id' : id},
{$inc: {`labelOptions.$.${labelOption}`: 1 }},
function(err){
console.log(err)
})
其中labelOption
是我想增加其值的值
更简洁地说,我在文档内部遇到了问题。
3条答案
按热度按时间41zrol4v1#
如果
labelOptions
是一个Object数组,则不可能直接递增.find
查询中的值。为了更简单,你应该把labelOptions
类型从Array of Objects改为Object:如果您要通过文档的
_id
进行查询,请考虑使用.findByIdAndUpdate
而不是.findOneAndUpdate
。然后,你可以通过以下方式实现你想要的:更新:如果你坚持使用
labelOptions
的对象数组,有一个解决办法:fxnxkyjh2#
还有另一种方法可以做到这一点,它允许更灵活的文档模型。如果你给对象添加一个字段,比如:
然后你可以这样做:
oxosxuxt3#
人们解决了它,但是,如果你使用它,如果数组中的元素不存在,一个解决方案: