2017-04-06 73 views
1

我有一個集合「帖子」。每篇文章都有一個發佈日期。我有兩個日期(週期) - start_date和end_date。我想彙總此集合(附加條件,例如published = true),並檢索3個值: - before_count(該期間之前的帖子數) - 期間的數量(該期間的帖子數) - after_count之後的帖子)MongoDb - 給定期間之前,期間和之後的帖子數

我該怎麼做?我對MongoDb不是很熟悉 - 我知道如何處理3個查詢,但我確信只有1個查詢才能完成。

+0

您展示3個查詢開始。如果沒有提供您正在查詢的任何文檔示例,您希望得到什麼樣的答案? –

回答

0

您可以使用該聚合操作,其中您最初的流水線步驟包括$match步驟來過濾進入管道中的文件和後續$group階段組中的所有文檔作爲單個查詢做到這一點(_id爲空),然後使用運算符創建用於獲取不同時間段計數的邏輯,以提供累加器的計數。

就拿下面的例子:

db.posts.aggregate([ 
    { "$match": { "publication_date": { "$exists": true }, "published": true } }, 
    { 
     "$group": { 
      "_id": null, 
      "before_count": { 
       "$sum": { 
        "$cond": [ 
         { "$lt": ["$publication_date", start_date] }, 
         1, 
         0 
        ] 
       } 
      }, 
      "during_count": { 
       "$sum": { 
        "$cond": [ 
         { 
          "$and": [ 
           { "$gte": ["$publication_date", start_date] }, 
           { "$lte": ["$publication_date", end_date] }, 
          ] 
         }, 
         1, 
         0 
        ] 
       } 
      }, 
      "after_count": { 
       "$sum": { 
        "$cond": [ 
         { "$gt": ["$publication_date", end_date] }, 
         1, 
         0 
        ] 
       } 
      } 
     } 
    } 
]) 
+1

非常感謝@chridam,這就是我正在尋找的! – Sycu

相關問題