2016-07-04 52 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 –