2017-02-23 74 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 } } 
) 
相關問題