$ inc对文档没有影响(根本不起作用)

时间:2018-05-24 19:28:51

标签: mongodb mongoose mongoose-schema

我有一个简单的民意调查试图在每次有人提升它时更新vote计数器。

我尝试使用$inc但它没有效果。因此它会在vote计数器更新后返回应该是更新的轮询/民意调查,但它只返回相同的一个而不会增加任何内容。

我做错了什么?

 app.patch('/voting/:id', (req, res) => {
      let userVote = req.body.votes;

  Poll_Schema_Model.findByIdAndUpdate({ "_id": '5b070f512a28d70eb0abaa51' }, { $inc: { "poll[0].votes":userVote } }, { new: true }, (err, newPoll) => {
    res.status(200).send(newPoll);
  })
    .catch(() => {
      res.status(400).send();
    });

});

newPoll导致: - (请注意投票为defaulted to 0

{
    "_id": "5b070f512a28d70eb0abaa51",
    "_creator": "5b04aba0ee81bb26182b2267",
    "poll": [
        {
            "votes": 0,
            "_id": "5b070f512a28d70eb0abaa52",
            "option1": "FIRST OPTIONNN",
            "option2": "SECOND OPTIONN"
        }
    ],
    "__v": 0
}

我的schema: -

const Poll_Schema = new mongoose.Schema({
    _creator: {
        type: mongoose.Schema.Types.ObjectId
    },
    poll: [{
        option1: {
            type: String,
            maxlength: 20,
            minlength: 3
        },
        option2: {
            type: String,
            maxlength: 20,
            minlength: 3
        },
        votes: {
            type: Number,
            minlength: 1,
            default:0
        }
    }]
});

1 个答案:

答案 0 :(得分:1)

引用数组项的syntax不同,您应该在poll.0.votes之后的点而不是[0]指定位置。所以你的代码应该是这样的:

app.patch('/voting/:id', (req, res) => {
   let userVote = req.body.votes;

   Poll_Schema_Model.findByIdAndUpdate({ "_id": '5b070f512a28d70eb0abaa51' }, { $inc: { "poll.0.votes":userVote } }, { new: true }, (err, newPoll) => {
     res.status(200).send(newPoll);
   })
     .catch(() => {
       res.status(400).send();
     });
});