我正在构建一个应用程序,您可以对用户提交的民意调查进行投票。这是我的民意调查的架构:
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
运算符的对象之后。我什么都没改变。有人可以帮忙解决这个问题吗?
答案 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)
})
})