2016-05-31 20 views
1

我有这样的mongodb结果。对mongodb中的推式数组进行排序

[ 
    { 
    "_id": { 
     "_id": "57174838afb8eb97ccd409ca", 
     "name": "Yet another position", 
     "description": "description", 
     "code": "11Y-WK" 
    }, 
    "votes": [ 
     { 
     "candidate": { 
      "_id": "56f19694e84a6bf1b66ad378", 
      "surname": "EBIMOBOERE", 
      "firstName": "BLESSING", 
      "middleName": "OGIONWO", 
      "othername": " BAZIGHA OGIONWO", 
      "sc_number": "071050" 
     }, 
     "count": 3 
     }, 
     { 
     "candidate": { 
      "_id": "56f19690e84a6bf1b66aa558", 
      "surname": "OIWO", 
      "othername": "PETER ODION", 
      "sc_number": "034837" 
     }, 
     "count": 2 
     }, 
     { 
     "candidate": { 
      "_id": "56f19690e84a6bf1b66aa2f3", 
      "surname": "FASHOLA", 
      "othername": "OLUFUNKE JUMOKE", 
      "sc_number": "008243" 
     }, 
     "count": 4 
     } 
    ], 
    "total_count": 9 
    }, 
    { 
    "_id": { 
     "_id": "571747a8afb8eb97ccd409c7", 
     "name": "Test Position", 
     "description": "Description", 
     "code": "10T-9K" 
    }, 
    "votes": [ 
     { 
     "candidate": { 
      "_id": "56f19690e84a6bf1b66aa3b7", 
      "surname": "ASAKA", 
      "othername": "ISAAC", 
      "sc_number": "044660" 
     }, 
     "count": 1 
     }, 
     { 
     "candidate": { 
      "_id": "56f19690e84a6bf1b66aa6ea", 
      "surname": "ADEYEMI", 
      "othername": "OLUWAFUNMILZYO", 
      "sc_number": "062444" 
     }, 
     "count": 5 
     }, 
     { 
     "candidate": { 
      "_id": "56f1968fe84a6bf1b66aa03e", 
      "surname": "OGWOR", 
      "othername": "JAMES", 
      "sc_number": "042357" 
     }, 
     "count": 3 
     } 
    ], 
    "total_count": 9 
    } 
] 

我需要count在降序排序。

以下是返回上述结果的查询。 我已经尝试在所有阶段应用排序,但没有运气。

Vote.aggregate([ 
{ "$match": { "_poll" : mongoose.mongo.ObjectID(req.query._poll) } }, 
{ 
    "$group": { 
    "_id": { 
     "_position": '$_position', 
     "candidate": '$candidate' 
    }, 
    "voteCount": { "$sum": 1 } 
    } 
}, 
{ 
    "$group": { 
    "_id": "$_id._position", 
    "votes": { 
     "$push": { 
     "candidate": "$_id.candidate", 
     "count": "$voteCount" 
     } 
    }, 
    "total_count": { "$sum": "$voteCount" } 
    } 
}, 
{ "$sort": { "total_count": -1 } } 

在那里我需要插入排序操作,按降序排序。

回答

0

在聚合过程中排序数组有点棘手。 那么我duinfg要解决的是:

  1. 平仓阵列
  2. 排序应用
  3. 重新组合排列

请找蒙戈shell代码,这将应该给出一个概述加时赛这种技术:

var group = {$group:{_id:"$type", votes:{$push:"$value" }}} 
var unwind={$unwind:"$votes"} 
var sort = {$sort:{"votes":-1}} 
var reGroup = {$group:{_id:"$_id", votes:{$push:"$votes" }}} 
db.readings.aggregate([group,unwind,sort ,reGroup]) 

欢迎任何评论!

+0

我打算按次数排序!我可以做var sort = {$ sort:{“votes.count”: - 1}}? – Radiumrasheed

+0

@Radiumrasheed:我的代码片段就是一个例子 - 根据需要进行修改和调整 – profesor79