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

时间:2020-09-15 15:33:27

标签: javascript promise async-await resolve

我正在使用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}

如何正确解决此问题?

1 个答案:

答案 0 :(得分:0)

使用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集合的外键字段。