2017-02-23 100 views
0

假设集合结构为;比较两个文档字段并在一个查询中返回最大值

{ 
    name: "alex", 
    age: 21 
}, 
{ 
    name: "felix", 
    age: 11 
} 

我想在一个查询中获得两个文档年龄的最大值。我的意思是这个,我想比较name: alexname: felix的年龄并返回21

到目前为止我做了什么是写两个单独的查询为;

var maxAge; 
db.collection.find({name: "alex"}, {age: 1, _id: 0}).toArray(function(err, result){ 
    maxAge = result[0].age; 
}) 

db.collection.find({name: "felix"}, {age: 1, _id: 0}).toArray(function(err, result){ 
    if(result[0].age > maxAge){ 
     maxAge = result[0].age; 
    } 
}) 

return maxAge; 

我找多少有效的方式来做到这一点。我怎样才能以更合乎逻辑的方式做到这一点?

回答

0

您可以使用聚合来比较两个文档。

db.collection.aggregate(
    {$match:{name: {$in: ["alex", "felix"]}}}, 
    {$group:{_id:null, first:{$first:"$age"}, second:{$last:"$age"}}}, 
    {$project: {maxAge: {$max: ["$first", "$second"]}, _id: 0 } } 
) 
相关问题