NodeJS 如何进入另一个收藏与forigen钥匙

lztngnrs  于 2022-11-22  发布在  Node.js
关注(0)|答案(1)|浏览(213)

我有这些集合(booksbook_genresgenresbooks)我的bookSchema是这样的

var bookModel = function () {
    var bookSchema = mongoose.Schema({
        _id: mongoose.Schema.Types.ObjectId,
        author_id: {
            type: mongoose.Schema.Types.ObjectId,
            ref: "Author",
        },
        title: String,
        description: String,
        cover: String,
        likes: Number,
    });
    return mongoose.model("Book", bookSchema);
};

module.exports = new bookModel();

我使用dust模板,并在布局上呈现该集合数据

{#books}
             <div class="large-4 small-12 columns book">
                <div class="row img-row">
                <img src="{.cover}" alt="">
                </div>
                <div class="row">
                <h3 class="small-12">{.title}</h3>
                  <h4 class="small-5 columns ">{.author_id}</h4>
                   <h4 class="small-7 columns ">{.name}</h4>
                </div>
               
                   <div class="row p-row">
                    <p class="small-12">{.description}</p>
                   </div>
             </div>

     {/books}

我的authorSchema是这样的

var authorModel = function () {
    var authorSchema = mongoose.Schema({
        _id: mongoose.Schema.Types.ObjectId,
        name: String,
    });
    return mongoose.model("Author", authorSchema);
};

我希望能够访问authorname,以便通过从bookSchema获得的author_id在我的布局上渲染它(确保authors集合中的idbooks集合中的author_id相同)
我试图搜索一些解决方案,但没有人使用dust模板,所以我无法找到答案

j0pj023g

j0pj023g1#

您可以使用populate来解析Author指涉:

bookModel.find({}).populate('author_id').exec();

然后,您应该能够使用以下命令访问引用的用户字段:

<h4 class="small-7 columns ">{.author_id.name}</h4>

在您的情况下,应该将代码更改为:

module.exports = function (router) {
  router.get('/', function (req, res) {
    Book.find({})
      .populate('author_id')
      .exec(function (err, books) {
        if (err) {
          console.log(err);
        }
        var model = { books: books };
        res.render('index', model);
      });
  });
};

相关问题