2014-09-23 109 views
0

如何按funnelSteps[0].count对文档进行排序,即如何按count排序第一个funnelSteps的编号?mongodb查询和按列表项目排序

谢谢。

{ 
    "funnelSteps" : [{ 
     "title" : "step1", 
     "criteria" : ["1","2"], 
     "count" : 305 
    }, { 
     "title" : "step2", 
     "criteria" : ["1","2","3"], 
     "count" : 153 
    }] 
} 

回答

1

MongoDB使用"dot notation"指嵌套元素中的结构,所以可以确实由索引指定一个元素:

db.collection.find().sort({ "funnelSteps.0.count": 1 }) 

1排序顺序为降序升序或-1 。有关更多详细信息,请参阅.sort()

这是罚款的数组元素的“已知”的位置,但如果你想通过为“最”值“funnelSteps”内一些诸如排序,那么你会使用.aggregate()做这样的事情:

db.collection.aggregate([ 
    { "$unwind": "$funnelSteps" }, 
    { "$group": { 
     "_id": "$_id", 
     "funnelSteps": { "$push": "$funnelSteps" }, 
     "lowestCount": { "$min": "$funnelSteps.count" } 
    }}, 
    { "$sort": { "lowestCount": 1 } } 
]) 

所以在这种情况下,您需要“分开”数组,以便在排序前获得所需的值。但是对于已知的位置,您可以使用基本参数进行排序,如图所示。