簡體   English   中英

如何在 mongoose 節點 js 中查找一周中每一天的數據

[英]How to find data in for every day of week in mongoose node js

詢問

const weekGraph = await tmUserSubscriptions.aggregate([
            {
                $match:{$and:[{subscriptionId: mongoose.Types.ObjectId(subscriptionId)},
                {createdAt:{$gte:moment().startOf('isoweek').toDate(),
                 $lt:moment().endOf('isoweek').toDate()}}
                ]}
            },
            {"$project":{
                "_id:":1,
                "createdAt":{"$dayOfWeek":"$createdAt"},
                "subscriptionId":1,
                
        }},
        {"$group":{
            "_id":"$createdAt",
            "count":{$sum:1},
        }}
        ])

結果我得到

"data": [
        {
            "_id": 7,
            "count": 1
        },
        {
            "_id": 5,
            "count": 2
        },
        {
            "_id": 6,
            "count": 1
        }
    ]

預期結果

"data": [
        {
            "_id": 7,
            "count": 1
        },
        {
            "_id": 6,
            "count": 2
        },
        {
            "_id": 5,
            "count": 1
        },
        {
            "_id": 4,
            "count": 0
        },{
            "_id": 3,
            "count": 0
        },{
            "_id": 2,
            "count": 0
        }{
            "_id": 1,
            "count": 0
        }
    ]

所以在這里我想每天獲得當前一周的所有數據,在我當前的查詢中,如果工作日沒有任何數據,那么它將不會返回那一天,但根據我的預期結果,我想要一周中的所有數據,如果工作日的任何一天都沒有數據,那么它將返回 0,所以我想要所有 7 天的數據,這里 _id 代表星期幾

如果鍵存在,Mongoose/MongoDB 只會返回聚合。 否則,它不會返回數據(通過連接傳輸的數據越少總是越快)。 因此,如果聚合沒有適合您的數據,您將需要提供自己的默認值。

var results = [{ _id: 1, count: 1 }] // assumed from your response

var hasResult = []
for (var result of results) {
  hasResult.push(result._id)
}

for (var i = 1; i <= 7; i++) {
  if (!hasResult.includes(i)) {
    results.push({ _id: i, count: 0 })
  }
}

console.log(results)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM