2016-12-10 7 views
0

私は多くの例を読んだので、何が問題なのか分かりません。

この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 
} 

は、ここで私がこれまで持っているものです。

投票Expressとマングースを使用してモデル

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) 
    } 
) 
}) 

私の端末では、console.log(documentは私が探していたドキュメントを受け取っていますが、値はまったく更新されません。

を正しく設定していますか?または、Mongooseはテンプレート文字列をサポートしていませんか?

***更新 これは私がインターネット上でいくつかの研究を行った後、文書

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!'}) 
    }); 

答えて

0

を作成していますかの抜粋ですが、私はそれが働いて波平理由を見つけました:あなたが持つオブジェクトを初期化することはできません'動的な'キー。

出典:そうと、オブジェクトリテラルを初期化するだけの簡単な解決策だった、ということを知ることによって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) 
    } 
)