首页 > 解决方案 > 如何在mongodb中合并两个模式

问题描述

我有一个帖子架构和用户架构,我想将它们合并在一起。我想知道怎么做。到目前为止,我有这个代码,但我一直在返回承诺。当我在 .map 之后添加 then 时,我没有得到任何结果。任何帮助,将不胜感激

let posts = await Post.find();
            console.log(posts);
            let test = await posts.map(async(post) => {
                const creator = await User.findOne({token: post.creator});
                var username = null;
                if(creator){
                    username = creator.username;
                }

                return {...post._doc, username: username};
            });
            return posts;

标签: mongodbmongoose

解决方案


你可以使用qasync模块

const q = require("q");
const async = require("async");

async function mainFunction() {
  try {
    let posts = await Post.find();
    let result = await getUser(posts);
    console.log(result)
  } catch (error) {
    console.error(error);
    return { error: error };
  }
}

async function getUser (posts) {
  let defer = q.defer;
  let test = [];
  async.eachSeries(posts,async (post) => {// like loop
      try {
        let creator = await User.findOne({ token: post.creator });
        var username = null;
        if (creator) {
          username = creator.username;
        }
        test.push({ ...post._doc, username: username });
      } catch (error) {
        console.log(error);
      }
    },() => {//callback
      console.log("finish loop");
      defer.resolve(test); // when finished loop return result
    }
  );
  return defer.promise;
};

推荐阅读