所以我有兩個貓鼬的模型:保存對象到另一個模式陣列
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var eventSchema = new mongoose.Schema({
name: String,
date: String,
dogs: [{ type: Schema.Types.ObjectId, ref: 'Dog' }]
});
module.exports = mongoose.model('Event', eventSchema);
和
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var dogSchema = new mongoose.Schema({
name: String,
age: String,
gender: String,
});
module.exports = mongoose.model('Dog', dogSchema);
Event
包含dogs
數組和IM試圖找出如何添加/刪除狗給這個陣列。
在客戶端上我得到了這個方法:
$.ajax({
url: "http://localhost:3000/api/events/",
dataType: 'json',
type: 'POST', // Not sure if I should Post or Put...
data: {event_Id : this.props.choosenEvent._id, //Here I got the Id of the Event that i want to update by
dog_Id : this.props.events[dog]._id }, //adding this dog, which Id is here
success: function(data) {
}.bind(this),
});
},
在服務器上,的NodeJS,我得到了我的路線的API。對我來說,使用PUT方法是有道理的,並且首先通過將event_Id作爲參數傳遞來獲取正確的事件。像這樣的:
router.route('/events/:event_id')
.put(function(req, res) {
Event
.findById({ _id: req.param.event_id })
.populate('dogs')
});
但我在這一點卡住了。任何幫助讚賞。謝謝!
更新!
謝謝!你的代碼有很多幫助,你使用lodash。刪除數組中的狗,是否有類似的方式來添加一個項目與lodash?
我給Add方法這樣一去:
router.route('/events')
.post(function(req, res) {
// Your data is inside req.body
Event
.findById({ _id: req.body.event_Id })
// execute the query
.exec(function(err, eventData) {
// Do some error handing
// Your dogs are inside eventData.dogs
eventData.dogs.push(req.body.dog_Id);
console.log(eventData)
});
// Update your eventDate here
Event.update({_id: req.body.event_id}, eventData)
.exec(function(err, update) {
// Do some error handing
// And send your response
});
});
當我打的console.log(eventData)
我可以看到dog_id
被添加到陣列,因爲它應該。但它不會保存到數據庫,並且錯誤說eventData
未在Event.Update
中定義。我懷疑這是一個Js範圍問題。
Onte事情是這樣的:
很顯然,我希望能夠添加和刪除陣列和 路線狗是這樣的:router.route('/events')
。
但是,如果add-method和remove-method都在同一條路徑上,那麼代碼如何知道我要去哪?
非常感謝!你把我放在正確的軌道上。如果可以,請查看更新。 – user2915962
@ user2915962我已經更新了我的答案。 –
非常感謝!這篇文章對我來說會派上用場。 – user2915962