gpt4 book ai didi

mongodb - 蒙戈 : Using $dayOfWeek in a $match clause when query has also a $groupy

转载 作者:可可西里 更新时间:2023-11-01 09:59:19 25 4
gpt4 key购买 nike

我有一个 mongo 文档,其中一些寄存器存储有日期,例如以非常简化的方式:

{
"vehicleId" : "vehicle4",
"telemetryDate" : ISODate("2013-06-22T05:00:00Z"),
"alarmsTotal" : 9
}
{
"vehicleId" : "vehicle5",
"telemetryDate" : ISODate("2013-06-20T05:00:00Z"),
"alarmsTotal" : 2
}

我需要按 vhicleId 执行分组,汇总警报总数。不过,可以选择是否排除周末(周六、周日)。

我一直在用 Mongo 寻找这个问题的答案,但没有成功。我的查询在不考虑正常工作的排除周末的情况下是:

{
"aggregate":"telemetrySummary",
"pipeline":[
{
"$match":{
"telemetryDate":{
"$gte":{
"$date":"2013-06-20T05:00:00.000Z"
},
"$lte":{
"$date":"2013-06-24T05:00:00.000Z"
}
}
}
},
{
"$group":{
"_id":{
"vehicleId":"$vehicleId"
},
"alarms":{
"$sum":"$alarmsTotal"
}
}
}
]
}

我需要排除 mongo 运算符 $dayOfWeek 为 1(星期日)和 7(星期日)的值。我尝试了很多查询,其中一个合乎逻辑的查询是:

{
"aggregate":"telemetrySummary",
"pipeline":[
{
"$match":{
"telemetryDate":{
"$gte":{
"$date":"2013-06-20T05:00:00.000Z"
},
"$lte":{
"$date":"2013-06-24T05:00:00.000Z"
}
},
"{ \"$dayOfWeek\" : \"$telemetryDate\"}":{
"$in":[2,3,4,5,6]
}
}
},
{
"$group":{
"_id":{
"vehicleId":"$vehicleId"
},
"alarms":{
"$sum":"$alarmsTotal"
}
}
}
]
}

我认为我真正的问题基本上是我不知道如何将不可分组变量上的 $dayOfWeek 操作作为 telemetryDate 存储到我可以与 $in 运算符比较的日期变量中。

感谢阅读并希望能找到一些指导:)

最佳答案

您应该在 $project 中使用 $dayOfWeek,如下所示:

[{<your match by date>}, {$project:{vehicleId:1, telemetryDate:1, alarmsTotal:1, dow:{$dayOfWeek:'$telemetryDate'}}}, {$match:{dow:{$in:[2,3,4,5,6]}}}, <rest of pipeline> ]

顺便说一句,您的第一个$match 可以受益于使用索引,就像普通的find 命令一样。它将提高大型数据集的性能。

关于mongodb - 蒙戈 : Using $dayOfWeek in a $match clause when query has also a $groupy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17240914/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com