猫鼬:$ inc不工作

时间:2016-12-10 19:00:44

标签: node.js mongodb express mongoose

我不确定问题是什么,因为我已经阅读了很多例子。

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

所以我能够创建一个文档格式:

let firebase = FIRDatabase.database().reference()

// Access The Posts child of the database
self.firebase.child("Posts").observeSingleEvent(of: .value, with: { (snapshot: FIRDataSnapshot) in

 if let snapVal = snapshot.value {
     // Iterate through posts..
    // Note that if you want to iterate though a snapVal, the best way to to so would be through converting it to a Dictionary of [String: AnyObject]!
}

})

这是我到目前为止所拥有的:

民意调查模式

{
  "_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)

在我的终端中,我看到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) } ) }) 它收到了我正在查找的文档但它根本没有更新该值。

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

***更新 这是我如何创建文档的片段

console.log(document

1 个答案:

答案 0 :(得分: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)
    }
  )