2017-04-11 73 views
1

我正尝试根据postID和日期内的最高出现次数对响应进行排序。猫鼬/ MongoDB - 按最高出现次数排序

我的收藏结构:

[ 
    { 
    "postID": "2", 
    "date": "2017-04-11 21:40:52", 
    }, 
    { 
    "postID": "1", 
    "date": "2017-04-11 21:40:52", 
    }, 
    { 
    "postID": "2", 
    "date": "2017-04-11 21:40:52", 
    }, 
    { 
    "postID": "2", 
    "date": "2017-04-11 21:40:52", 
    }, 
] 

因此,在这种情况下,出现频率最高的是帖子ID:2,所以,我想是这样的:

{ 
    postID: 2, 
    postID: 1 
} 

注意:请记住,我需要在两个日期之间搜索。

对不起,如果这太明显。我甚至不知道如何开始做Mongo/mongoose的搜索。

我的堆叠:

  • 节点与猫鼬
  • 的MongoDB 3.2.5

任何投入会有所帮助。谢谢

回答

1

您可以使用MongoDB聚合框架在特定属性上进行分组。围绕聚合框架的Mongoose has a low-level wrapper

你可以$grouppostID作为_id这将给你每个独特的价值观。那么你可以$sort。您还可以使用$project的财产重新命名回postID如果你喜欢:

Collection.aggregate([ 
    {$group: {_id: "$postID"}}, 
    {$sort: {_id: -1}}, 
    {$project: {postID: "$_id", _id: 0}} 
]); 
+0

圣钼!这就像一个魅力伴侣。非常感谢。 PS:这是用户名的一个地狱@ExplosionPills笑lol –

+0

哦,以及 - 我该如何在这个(两个日期之间)查找?我会环顾四周,但看到你似乎知道所有的事情,我想我也可以问(关于我原来的问题中的日期字段) –

+1

对于过滤器部分,只需在$ $组之前添加一个初始'$ match'流水线步骤'ie'{$ match:{date:{$ gt:from_date,$ lt:to_date}}}' – chridam