如何结合MongoDB的输出查找查询?

时间:2017-10-03 09:56:05

标签: javascript node.js mongodb mongoose

我正在尝试组合两个函数调用的结果,并将一个json对象作为输出返回到我的api调用。

getUserList函数重试注册用户列表,averageUserAge函数返回属于特定年龄组的人的平均年龄

在合并函数中,我想组合两者的输出并返回一个json对象。

有人可以解释我怎样才能实现这个目标?

请注意,我不是在寻找聚合函数,因为它在我的业务案例中没有产生预期的输出。下面是为了展示我正在寻找的东西而编写的示例代码,因为我的业务案例太复杂而无法解释。 / p>

function getUserList(req,res){

userModel.findOne({ageGroup : 'some group'},{name : 1,email : 1, credits : 1},{}, function(err, result) {
    if( err || !result) {
        console.log("No user found");
    } else {
        return result
    };
});

}

function averageUserAge(req,res) {

ageModel.findOne({ageGroup : 'some group'},{email : 1, credits : 1},{}, 
function(err, result) {
    if( err || !docs) {
        console.log("No users with a particular age group found");
    } else {
        return result
    };
});

}
//Merge the output of two function calls
function merge(req,res){

   var result1=getUserList(req,res)
   var result2=averageUserAge(req,res)

   var mergedResult=//How to merge result1 & result2

   return res.json(mergedResult)

}

2 个答案:

答案 0 :(得分:1)

你可以使用这个很棒的库async或者你可以使用回调

答案 1 :(得分:0)

您可以尝试这样的事情:

function merge(req, res) {
    const result1 = getUserList(req,res);
    const result2 = averageUserAge(req,res);

    return Promise.all([result1, result2]).then(() => {
        return res.send({res1: result1, res2: result2});
    }).catch(e => res.status(400).send(e));
};

Promise.all确保result1result2分别返回了它们的值。然后发回包含JSON对象的响应,包括res1res2结果。