2015-02-02 2 views
0

Я не могу установить отношения между моим контроллером Rides и Comments в моем приложении (построенном с использованием генератора углового ползунка yoman).Отношение Mongoose не работает в обоих направлениях

комментарий модель:

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

var CommentSchema = new Schema({ 
    name: String, 
    comment: String, 
    active: Boolean, 
    ride: { type: mongoose.Schema.Types.ObjectId, ref: 'Ride' } 
}); 

module.exports = mongoose.model('Comment', CommentSchema); 

езды Модель:

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

var RideSchema = new Schema({ 
    name: String, 
    distance: String, 
    climb: String, 
    rating: String, 
    active: Boolean, 
    comments: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Comment' }] 
}); 

module.exports = mongoose.model('Ride', RideSchema); 

Доступ к/API/комментарии/дает мне правильный результат, содержащий связанную Поездку:

{"_id":"54ce818f8c2889da58b01e19","name":"NAAM","comment":"COMMENT","ride":"54ce69647a78532057aa98e0","__v":0}] 

Доступ к/API/едет/дает мне следующий результат, без соответствующих Комментариев:

[{"_id":"54ce69647a78532057aa98e0","name":"Ride test ingevuld","distance":"4000","climb":"1200","rating":"1","__v":0,"comments":[]}] 

Может кто-нибудь сказать мне, что я делаю неправильно?

ответ

0

Пример одного из моих проектов:

exports.insertRoom = function(req, res) { 
var id = req.body.id; 

var r = req.body.room; 
var room = new Room({name: r.name}); 

Floor.update(
    {_id : id}, 
    { 
     $push: { rooms: room} 
    }, 
    {upsert:true}, 
    function(floor, err) 
    { 
      res.sendStatus(200); 
    } 
); 

};

+0

Это почти работает. кроме моего ng-repeat не обновляется (обновляется список, содержащий комментарии). В моем контроллере у меня есть: 'export.addCommentToRide = function (req, res) { var id = req.params.id; var c = req.body.comment; var comment = new Комментарий ({name: c.name}); Ride.update ({_: ID}, {$ толчок: {комментарии: комментарий}}, { upsert: истинно}, функция (поездка, ERR) { возвращение res.json (200, поездка); } ); }; ' – jstslkrt

+0

Проверьте db, если ваши данные были сохранены правильно. Если это так, вы должны снова прочитать сборку с сервера, чтобы обновить данные. Сохраните эту коллекцию в своей области и каждый успешный пост добавьте те же данные в свой локальный массив. Убедитесь, что вы получаете Rides с комментариями с сервера te, вы можете проверить его на вкладке «Сеть» в инспекторе Google Chrome, который показывает u все ваши запросы и ответы с сервера – Mike

0

Насколько я обеспокоен, это не работает. Ваши комментарии прошли, и ваша поездка получила свои комментарии. Я думаю, вы должны удалить

ride: { type: mongoose.Schema.Types.ObjectId, ref: 'Ride' } 

и сохранить комментарии внутри поездки.

comments: ['Comment'] 

Это более объективное решение, как это должно быть в Монго DB, который был разработан для объективных (иерархических) данных.

+0

Спасибо за ваш ответ, но, к сожалению, он, похоже, не решает мою проблему. Возможно, мой контроллер неправильный ($ http.post ('/ api/comments', {name: 'NAAM', комментарий: 'COMMENT', ride: $ scope.id});)? – jstslkrt

+0

Я бы сделал это следующим образом: 1. Управляйте контроллером сервера addCommentToRide с помощью $ push (read moongose ​​$ push), который будет толкать объект комментария, чтобы ездить на объекте. Затем добавьте собственную маршрутизацию сервера к этому действию POST. Затем вы можете опубликовать свой комментарий с углового через $ http, например. {comment: commentObject, rideId: yourRideId} – Mike

Смежные вопросы