【问题标题】:Mongoose: $inc not working猫鼬:$inc 不工作
【发布时间】:2016-12-10 19:00:44
【问题描述】:

我不确定问题出在哪里,因为我已经阅读了许多示例。

根据我在 StackOverFlow(Mongoose - Increment a value inside an array of objects) 中的建议,我轻松地更改了民意调查的格式以适应建议的内容。

所以我能够像这样创建文档格式:

{
  "_id": "584c4160b3b22e1bdad59bce",
  "title": "Food",
  "description": "test",
  "labelOptions": {
    "burger": 29,
    "coffee": 44,
    "pizza": 23
  },
  "date": "Dec 10, 2016",
  "__v": 0
}

这是我目前所拥有的:

投票模型

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const pollData = new Schema({
  title: String,
  description: String,
  labelOptions: {},
  date: String
})

module.exports = mongoose.model('PollData', pollData)

使用 express 和 mongoose,这就是我所拥有的:

app.put('/polls/:id', function(req, res){
  let id = req.params.id;
  let labelOption = req.query.labelOption;
  let query = `labelOptions.${labelOption}`
  Poll.findByIdAndUpdate(
    id,
    {$inc: { query: 1 } },
    function(err, document){
      console.log(err)
      console.log(document)
    }
  )
})

在我的终端中,我看到 console.log(document 它收到了我正在寻找的文档,但它根本没有更新值。

我是否正确设置了模型?还是 Mongoose 不支持模板字符串?

***更新 这是我如何创建文档的 sn-p

  let labelOptions = {}; <=== creating object literal to hold as placeholder
  const title = req.body.title;
  const description = req.body.description;
  req.body.labelOptions.split(/,\s*/).map( prop =>{
    labelOptions[prop] = 0 // set counter to default 0
  })

  const poll = new Poll({
    title: title,
    description: description,
    labelOptions: labelOptions,
    date: moment().format('MMM D, YYYY')
  });

  poll.save(function(err) {
    if (err) { return next(err); }
    res.json({ message : 'Poll added!'})
  });

【问题讨论】:

    标签: node.js mongodb express mongoose


    【解决方案1】:

    在互联网上做了一些研究后,我找到了它不起作用的原因:您无法使用“动态”键初始化对象。

    来源:Mongoose update on a string variable not working?

    知道了这一点,这只是一个简单的解决方案来初始化一个字面量对象:

      let id = req.params.id;
      let labelOption = req.query.labelOption;
      let query =  "labelOptions." + labelOption
      let obj = {
        [query] : 1
      }
      Poll.findByIdAndUpdate(
        id,
        {$inc: obj },
        function(err, document){
          console.log(err)
          console.log(document)
        }
      )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-16
      • 1970-01-01
      • 2018-07-22
      • 2015-11-18
      • 2018-05-02
      • 2017-05-26
      • 2013-02-13
      • 1970-01-01
      相关资源
      最近更新 更多