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

Posted

技术标签:

【中文标题】如何组合 MongoDB 查找查询的输出?【英文标题】:How to combine output from MongoDB find query? 【发布时间】:2018-03-14 11:44:08 【问题描述】:

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

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

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

有人能解释一下我怎样才能做到这一点吗?

请注意,我不是在寻找聚合函数,因为它不会在我的业务案例中产生预期的输出。下面是示例代码,用于演示我正在寻找的内容,因为我的业务案例太复杂而无法解释。

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)


【问题讨论】:

combine or merge json object的可能重复 参考这个答案***.com/a/45728310/7635845实际上这个答案与mysqldb有关,代替mysql查询保持mongodb查询和检查。这段代码对我有用我希望这对你在mongodb也有帮助.. 【参考方案1】:

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

【讨论】:

【参考方案2】:

你可以试试这样的:

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 结果。

【讨论】:

以上是关于如何组合 MongoDB 查找查询的输出?的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB 条件查询和排序

MongoDB - 对时间序列子文档进行范围查询

如何在 MongoDB 中组合 3 个查询的结果?

如何在 MongoDb 的嵌入式数组中查找多个元素

MongoDB:如何使用查找查询填充嵌套对象?

04 MongoDB各种查询操作 以及聚合操作总结