2017-02-23 7 views
0

コレクション構造は、2つのドキュメントフィールドを比較し、1つのクエリでmaxを返します。

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

1つのクエリで最大2つのドキュメントの年齢を取得したいと考えています。つまり、私はname: alexname: felixの年齢を比較し、21を返したいと思っています。

私がこれまで行ってきたことは、2つの別個のクエリを次のように書いています。

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

集計を使用して2つのドキュメントを比較できます。

db.collection.aggregate(
    {$match:{name: {$in: ["alex", "felix"]}}}, 
    {$group:{_id:null, first:{$first:"$age"}, second:{$last:"$age"}}}, 
    {$project: {maxAge: {$max: ["$first", "$second"]}, _id: 0 } } 
) 
関連する問題