4

我有一個數據庫模式是這樣的:MongoDB的 - 貓鼬,整理和總結兩個領域

var User = new mongoose.Schema({ 
    ... 
    points:{ 
    type: Number 
    }, 
    extraPoints:{ 
    type: Number 
    }, 
    ... 
}) 

好吧,當我想排序我想有一個歸檔,總結這樣的兩個字段的數據庫:

var newFiled = (points*50 + extraPoints); 

所以當我排序的數據庫我會做這樣的事情:

model.User.find({}).sort(newFiled).exec(); 

我已經簽出聚集,但我做的在聚合時不知道如何排序。
Thanx for help :)

回答

9

在mongodb聚合中,這可以通過運算符$project來實現。 newField通過$project運算符流水線階段與$add算術運算符相加,後者添加了兩個字段。排序是通過$sort管道步驟完成的:

var pipeline = [ 
    { 
     "$project": { 
      "points": 1, 
      "extraPoints": 1, 
      "newField": { "$add": [ "$points", "$extraPoints" ] } 
    }, 
    { 
     "$sort": { "newField": 1 } 
    }    
]; 

model.User.aggregate(pipeline, function (err, res) { 
    if (err) return handleError(err); 
    console.log(res); 
}); 

// Or use the aggregation pipeline builder. 
model.User.aggregate() 
    .project({ 
     "points": 1, 
     "extraPoints": 1, 
     "newField": { "$add": [ "$points", "$extraPoints" ] } 
    }) 
    .sort("newField") 
    .exec(function (err, res) { 
     if (err) return handleError(err); 
     console.log(res); 
}); 
+1

感謝looooot :)我希望我可以爲您投票兩次。 –

+0

@ user3425760不用擔心,樂意幫忙:-) – chridam