2013-06-26 106 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我已经fugured它:问题是博客。 find()返回一个数组,我应该使用__ [0] .category [0] .title或findOne()查找 –

回答

1

问题是Blog.find()返回数组,我应该使用__[0].category[0].title或使用findOne()查找。

+0

Findone解决方案适用于我^ _ ^ – ir0x539