我有一個集合「帖子」。每篇文章都有一個發佈日期。我有兩個日期(週期) - start_date和end_date。我想彙總此集合(附加條件,例如published = true),並檢索3個值: - before_count(該期間之前的帖子數) - 期間的數量(該期間的帖子數) - after_count之後的帖子)MongoDb - 給定期間之前,期間和之後的帖子數
我該怎麼做?我對MongoDb不是很熟悉 - 我知道如何處理3個查詢,但我確信只有1個查詢才能完成。
我有一個集合「帖子」。每篇文章都有一個發佈日期。我有兩個日期(週期) - start_date和end_date。我想彙總此集合(附加條件,例如published = true),並檢索3個值: - before_count(該期間之前的帖子數) - 期間的數量(該期間的帖子數) - after_count之後的帖子)MongoDb - 給定期間之前,期間和之後的帖子數
我該怎麼做?我對MongoDb不是很熟悉 - 我知道如何處理3個查詢,但我確信只有1個查詢才能完成。
您可以使用該聚合操作,其中您最初的流水線步驟包括$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
]
}
}
}
}
])
非常感謝@chridam,這就是我正在尋找的! – Sycu
您展示3個查詢開始。如果沒有提供您正在查詢的任何文檔示例,您希望得到什麼樣的答案? –