2016-07-04 33 views
0

鑑於以下架構如何使新的值被添加到陣列

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

var favoriteSchema = new Schema({ 
dishes: [{ 
    type: mongoose.Schema.Types.ObjectId, 
    ref: 'Dish' 
}], 
postedBy: { 
    type: mongoose.Schema.Types.ObjectId, 
    ref: 'User' 
} 
}, { 
timestamps: true 
}); 

var Favorites = mongoose.model('Favorite', favoriteSchema); 
module.exports = Favorites; 

及以下路由器

var bodyParser = require('body-parser'); 
var express = require('express'); 
var mongoose = require('mongoose'); 

var Favorites = require('../models/favorites'); 
var Verify = require('./verify'); 

var favoritesRouter = express.Router(); 

favoritesRouter.use(bodyParser.json()); 
favoritesRouter.route('/') 
.post(Verify.verifyOrdinaryUser, function(req,res,next){ 
    req.body.postedBy = req.decoded._doc._id; 
    console.log('nana ' + req.body.postedBy); 
    Favorites.create(req.body,function(err,fav){ 
     if(err) throw err; 

     fav.dishes.push(req.body); 
     fav.save(function(err,fa){ 
      if(err) throw err; 
      res.json(fa); 
     }) 
    }); 
}); 
module.exports = favoritesRouter; 

每次我做我部分更新的MongoDB內的數組和對象帖子要求郵遞員,我要把碟子ID附在請求的主體上。

{ 
    "_id": "577a996155d73cf02b0d516f" 
} 

我不能想出了一個解決這個ID插入到陣列,而不是重新創建整個對象只有1所述陣列內部的id。我做錯了什麼,或者爲了做我想要的邏輯而做了其他事情?

+0

您正在使用'喜歡它req.body'既是「最喜歡的」和「盤子」。這是什麼? – afuous

回答

0

您將要查詢數據庫以查找先前保存的對象,追加到數組,標記爲已修改,然後保存。它看起來是這樣的:

var bodyParser = require('body-parser'); 
var express = require('express'); 
var mongoose = require('mongoose'); 

var Favorites = require('../models/favorites'); 
var Verify = require('./verify'); 

var favoritesRouter = express.Router(); 

favoritesRouter.use(bodyParser.json()); 
favoritesRouter.route('/') 
.post(Verify.verifyOrdinaryUser, function(req,res,next){ 
    req.body.postedBy = req.decoded._doc._id; 
    console.log('nana ' + req.body.postedBy); 
    Favorites.findById(someID, function(err, fav){ 
     if(err) throw err; 

     fav.dishes.push(req.body); 
     fav.markModified('dishes') 
     fav.save(function(err,fa){ 
      if(err) throw err; 
      res.json(fa); 
     }) 
    }); 
}); 

你需要弄清楚你如何獲得ID在那裏。你可以使用動態端點:​​

favoritesRouter.use(bodyParser.json()); 
favoritesRouter.route('/:id') 
.post(Verify.verifyOrdinaryUser, function(req,res,next){ 
    var someID = req.params.id 
}) 

或者你可以做誰貼吧搜索(.find({postedBy: req.decoded._doc._id},...而不是.findById(someID,...),或別的東西

+0

只是好奇,markModiefied做什麼?我從來沒有這樣做,它工作正常:D – nxrd

+0

嗯。看起來我對markModified有點過分了。當你直接編輯一個數組元素時(例如'fav.dishes [3] ='PulledPork''),你必須將它與貓鼬一起使用,看起來在推到數組末尾可能並不需要。欲瞭解更多信息,請參閱:http://mongoosejs.com/docs/faq.html –