【问题标题】:Render every subdocuments of all documents with mongoose使用 mongoose 渲染所有文档的每个子文档
【发布时间】:2014-04-07 19:13:40
【问题描述】:

我有一个用户模型和一个宠物模型,使用 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});

    });
});

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

我怎样才能得到所有宠物?

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

感谢您的帮助!

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    您似乎正在尝试嵌入 Pet 子文档并像未嵌入一样使用它。

    首先,如果您正在使用嵌入式,则需要在使用 Pet 之前为它定义架构(首先创建它)。如果您正在嵌入,则无法以这种方式在宠物模型上进行查找。

    Mongoose Subdocuments

    如果您想在User 中存储对Pet 的引用,则需要存储它的ObjectId

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

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

    【讨论】:

    • 非常感谢!确实,我必须改变我的模型并做一个参考。
    猜你喜欢
    • 2017-02-28
    • 2020-11-12
    • 2021-02-17
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 2015-05-25
    • 2021-12-16
    • 2020-07-16
    相关资源
    最近更新 更多