使用mongoose渲染所有文档的每个子文档

时间:2014-04-07 08:48:01

标签: node.js mongodb mongoose

我有一个使用Mongoose的用户模型和宠物模型。

用户模型:

  var userSchema = mongoose.Schema({
     email        : String,
     password     : String,
     pets         : [Pet.schema]

   });

   module.exports = mongoose.model('User', userSchema);

宠物模型:

   var petSchema = mongoose.Schema({
    name         : String
    });

   module.exports = mongoose.model('Pet', petSchema);

我想在页面中呈现所有用户的所有宠物。我试着这样做:

    app.get('/pets', function(req, res) {

    Pet.find({}, function(err, pets){

       res.render('pets.ejs', {"pets":pets});

    });
});

但我只得到一个空数组[]。

我怎样才能得到每一只宠物?

更一般地说,我将不得不独立于用户使用宠物模型。我应该改变模型的构造方式吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

看起来您正在尝试嵌入Pet子文档并使用,就好像它没有嵌入一样。

首先,如果您正在进行嵌入式操作,则需要在使用之前为Pet定义架构(首先创建它)。如果您正在嵌入,那么就无法通过这种方式找到宠物模型。

Mongoose Subdocuments

如果您希望在Pet内存储对User的引用,则需要存储其ObjectId

pets : [{ type: Schema.Types.ObjectId, ref: "Pet"}]

然后,您可能会在运行时使用populate填充pets属性。