2013-06-26 4 views
2

Я хочу добавить в Blog объект несколько объектов Categories, и после этого получить доступ к первой категории блога.NodeJS + Mongoose: население не работает

var ObjectId = mongoose.Schema.Types.ObjectId; 

var categorySchema = mongoose.Schema({ 
    title: String, 
    blogs: [{ type: ObjectId, ref: 'Blog' }] 
}) 

var blogSchema = mongoose.Schema({ 
    title: String, 
    description: String, 
    category: [{ type: ObjectId, ref: 'Category' }], 
    created: {type: Number, default: new Date().getTime()} 
}) 

var Category = mongoose.model('Category', categorySchema) 
var Blog = mongoose.model('Blog', blogSchema) 

exports.addBlog = function (object, callback) { 
    Blog({ 
     title: object.title, 
     description: object.description, 
     category: object.category //array of sting ObjectID's - ['',''] – from multiselect box 
    }).save(function (err, _) { 
      Blog 
       .find({title: _.title}) 
       .populate('category') 
       .exec(function (err, __) { 
        if (err) return handleError(err); 
        console.log('Category is ', __.category[0].title); 
       }) 
      callback(err, _); 
     }); 
} 

В результате я получаю:

TypeError: Cannot read property '0' of undefined 

Кажется Мангуст не может найти объект в последней функции обратного вызова (__), но я проверил - _.title действителен. Как заполнить его? Благодарю.

+1

Первый взгляд: кажется, что '__. Category' не определен, потому что сообщение об ошибке говорит 0, и это единственное место, где у вас есть 0. – gustavohenke

+0

@gustavohenke. Я угадал это: проблема была в блоге. find() возвращает массив, я должен использовать __ [0] .category [0] .title или найти с findOne() –

ответ

1

Проблема была Blog.find() возвращает массив, я должен использовать __[0].category[0].title или найти с findOne().

+0

Решение Findone работало для меня^_ ^ – ir0x539

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