嵌套数组中的Mongodb Increment值无法正常工作

时间:2017-11-15 22:13:51

标签: mongodb mongoose

我正在构建一个应用程序,您可以对用户提交的民意调查进行投票。这是我的民意调查的架构:

const pollSchema = new Schema({
    userID: String,
    pollQuestion: String,
    pollOptions: [
        {
            name: String,
            quantity: Number
        }
    ]
})

这是处理递增轮询选项数量的快速路线:

app.put('/vote', (req, res) => {
    Poll.update(
        {
            id: req.body.id,
            'pollOptions.name': req.body.selection
        },
        { $inc: { 'pollOptions.$.quantity': 1 } }
    ).then(updatedPoll => {
        console.log('poll', updatedPoll)
        res.send(updatedPoll)
    })
})

这里req.body.selection是用户选择投票的选项。

我基本上希望用户所选选项的数量增加1。这种更新我从answer to this question

派生的数据库的方式

当我向此路线发送请求时,我会遇到一些非常意外的行为。首先,数据库不会以任何方式更新或更改。第二件事是updatedPoll是一个非常奇怪的对象。这是我从console.log得到的:

poll { n: 0,
  nModified: 0,
  opTime: 
   { ts: Timestamp { _bsontype: 'Timestamp', low_: 1, high_: 1510783687 },
     t: 1 },
  electionId: 7fffffff0000000000000001,
  ok: 1 }

我尝试过的一件事是将{ new: true }作为第三个参数包含在$inc运算符的对象之后。我什么都没改变。有人可以帮忙解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

感谢Neil Lunn的评论,改变我的路线为我工作:

poll.put('/vote', (req, res) => {
    Poll.findOneAndUpdate(
        {
            _id: req.body.id,
            pollOptions: {
                $elemMatch: { name: req.body.selection }
            }
        },
        { $inc: { 'pollOptions.$.quantity': 1 } },
        { new: true }
    ).then(poll => {
        res.send(poll)
    })
})