异步/等待返回[对象承诺]

问题描述

我正在使用expressjs和猫鼬。我需要将一个函数传递给我的页面,以便可以通过id动态地从数据库获取数据。目前我只返回[object Promise]

(在路线内)

const posts = await PostsModel.find();

    res.render('page',{
        posts: posts,Meta: async function(id){
          try{
            const result = await Model.findOne({id: id});
            return result;
          } catch(err){
            console.log(err.message);
          }
        }
      })

在mongo数据库中,有2个集合用于“帖子”,另一个集合用于“元”。目的是在ID中的“帖子”中找到一个条目,然后从“元”集合中按ID调用匹配的条目。

(即使用玉石渲染)

each post in posts
  span #{Meta(post.Meta.id).name}

如何正确解决此问题?

解决方法

使用mongo凝聚。

let query = [
    {
        $lookup: {
            from: "<meta collection>"
            localfield: "_id",foreignField: "id",as: "metas"
        }
    }
];

const posts = await PostModel.aggregate(query);

for (const post of posts) {
    // Do something with post.metas
    // for example,iterate them
}

_id是Post集合的主键。 id是Metas集合的外键字段。