猫鼬如何计算一个月中的唯一天数?

Mongoose how to count unique days in a month?

我正在处理一个问题,我的数据库中应该每天都有多个条目。 每个条目都包含一个时间戳。问题是我应该找出每个月有多少天输入了数据。 例如:如果用户在 5 月每 2 天发送一次消息。我的回答是:“用户在 5 月份使用了 15 天的消息功能”。 现在,如果用户在 5 月每 2 天发送 5 条消息。答案仍然是 15。我只计算用户使用该应用程序的天数。

使用这个查询:

model.find({ 
    date: {
        $gte: new Date(startOfMonth), 
        $lt: new Date(endOfMonth)
    }
})

我能够找到特定月份的所有数据条目。 数据可能如下所示:

 Date: dd/mm/yy        Message:
 1/5/2022              "Hello"
 1/5/2022              "World"
 1/5/2022              "!"
 5/5/2022              "Hello World!"
 8/5/2022              "Hello World!"

所需的答案是 5 月的 3 天。

如何使用 mongodb 实现此目的?想到的最简单的答案是使用其他查询按唯一日期分组,但我不知道如何使用 mongo 来做到这一点,前提是我需要访问日期。

你可以使用distinct
db.collection.distinct({date:{$gte:new Date(startOfMonth),$lt:new Date(endOfMonth)}}).length
如果您直接存储它的日期。

注意:如果您要存储完整的时间戳而不是日期,这可能不起作用。

这可能会解决您的问题。它将 return 不同的消息。


Model.aggregate(
    [
        { "$match": {
            "date": { 
                "$gte": new Date(startOfMonth), "$lt": new Date(endOfMonth)
            }
        }},
        { "$group": {
            "_id": { 
                "year":  { "$year": "$date" },
                "month": { "$month": "$date" },
                "day":   { "$dayOfMonth": "$date" }
            }
            "count": { "$sum": 1 }
        }}
    ],
    function(err,result) {
        // do something with result

    }
);