草庐IT

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

coder 2023-11-02 原文

我有一个 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/

有关mongodb - 蒙戈 : Using $dayOfWeek in a $match clause when query has also a $groupy的更多相关文章

  1. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

    刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

  2. ruby-on-rails - 语法错误 : unexpected $end when using if/else if? - 2

    我从我的一个Controller类中收到一个错误,我不知道为什么。错误是:SyntaxErrorinTermsController#show,syntaxerror,unexpected$end,expectingkeyword_end这是terms_controller.rb:classTermsController我的展示页面目前只包含:这可能是我遗漏的一些小东西-感谢您的帮助! 最佳答案 问题是end关键字不够,它在它之前找到了$end(代表文件结尾的标记)可以找到它要找的东西——另一个end。(end关键字的解析器标记是“k

  3. ruby-on-rails - 活跃商家 : How to authorise cards when using gateways that do not support the void operation? - 2

    我正在使用ActiveMerchant开发RubyonRails应用程序的计费组件。我们选择的支付网关是PaymentExpress.我看到的代码示例如下所示,使用authorize()和void()来测试卡的有效性:deftest_card!auth_response=gateway.authorize(100,card)gateway.void(auth_response.authorization)ifauth_response.success?raiseAuthorizationFailed.new(auth_response)unlessauth_response.succe

  4. ruby-on-rails - rails : How can you access session variables using multiple controllers? - 2

    我在使用session变量时遇到问题。我有两个名为“graduate_students_controller”和“current_students_controller”的Controller。这些Controller中的每一个都控制不同的View文件。我在这两个Controller中使用session变量来存储session信息。问题来了。假设我有两个View文件“reports/current_students_list”、“reports/graduate_students_list”,每个文件都由上述Controller单独控制。现在,如果我尝试从同一浏览器中打开这两个网页并尝

  5. ruby - 为什么在 IRB 中使用 Refinement 时得到 "main.using is permitted only at toplevel"? - 2

    我尝试在IRB(v0.9.6,Ruby2.3.0)中使用Refinement:moduleFoorefineObjectdodeffoo()"foo"endendendusingFoo#=>RuntimeError:main.usingispermittedonlyattoplevel这基本上是theexactsetupfromthedocumentation(这会导致相同的错误)。出了什么问题?我该如何解决这个问题? 最佳答案 这可能是IRb的错误或功能不当。众所周知,由于IRb的实现方式非常骇人听闻,因此它无法在所有极端情况下正

  6. ruby - Sinatra 应用程序中的错误 "undefined local variable or method ` logger '"when using ` logger.info` - 2

    我有以下Sinatra1.2.1应用程序代码:#app.rbrequire'sinatra'get'/'dologger.info"COUCOU"'Helloworld!'end并使用ruby-rubygemsapp.rb启动服务器。当我转到http://localhost:4567时出现错误:NameErrorat/undefinedlocalvariableormethod`logger'for#file:app.rblocation:blockinline:4我是否需要添加或配置一些东西才能在Sinatra中启用日志记录?阅读SinatraREADME和文档,似乎默认情况下为Si

  7. ruby-on-rails - rails : render a collection of models using an specific html view - 2

    我有以下关于rails的简单问题。假设我有一个模型用户。在View中,如果我这样做:views/user/_user.html.erb中的文件View将为每个用户调用和打印。如何更改它以使用特定View?我需要这样的东西:User.all:template=>"user/_user_2ndview.html"%>有什么帮助吗?提前致谢 最佳答案 您可以使用collection选项:User.all,:partial=>"users/user2ndview",:as=>:user%>View必须放在views/users/_user2

  8. ruby - 在 ruby​​ 中杀死一个名为 using open3 的进程 - 2

    我正在使用命令行程序,它的工作原理如下:$ROUTE_TO_FOLDER/app如果“longtext”是使用“app”需要的参数编写的,那么它将用结果填充一个文本文件。如果没有,它将连续用点填充文本文件(为了避免这种情况,我无法处理或修改“app”的代码)。在ruby​​脚本中有这样一行:text="longtextthatwillbeusedbyapp"output=system("ROUTE_TO_FOLDER/app现在,如果文本写得好,就不会有问题,我会得到一个输出文件,如前所述。当文本写得不好时,问题就来了。接下来发生的是我的ruby​​脚本挂起,我不确定如何终止它。我找到

  9. ruby - ruby 中嵌套模块定义和 using::in 定义有什么区别? - 2

    这之间有什么区别:moduleOutermoduleInnerclassFooendendend还有这个:moduleOuter::InnerclassFooendend我知道如果Outer之前没有定义,后一个例子将不起作用,但是在恒定范围内还有一些其他差异,我可以在SO或文档中找到它们的描述(包括ProgrammingRuby书) 最佳答案 感谢keymone的answer我制定了正确的Google查询并发现了这个:Module.nestingandconstantnameresolutioninRuby使用::更改常量作用域解析

  10. ruby-on-rails - rails : Using CanCan to define multiple roles depending on instances of single Model? - 2

    我目前一直在研究如何根据我们想要的每个条件来分离CanCan的角色。在我们的应用程序中,有很多类别(例如数学、英语、历史等),每个类别中都有很多类(class)。每个用户可以在每个类别中扮演许多不同的角色。例如,约翰可以是数学的“读者”,这意味着他可以阅读所有数学类(class)。约翰也可以是英语的“作家”,这意味着他可以阅读所有英语类(class),在类别英语中创建类(class),并仅编辑/删除他创建的英语类(class)。如果这些是John仅有的角色,他将无法在导航栏中看到类别历史记录,并且将被拒绝访问历史记录中的类(class)。这些是关系的建立方式:classUser在mod

随机推荐