2017-04-11 76 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