当前位置: 首页 > 知识库问答 >
问题:

Mongo日期查询问题

丘飞
2023-03-14
{
    "_id" : ObjectId("1234528f4a224cdb39aaa"),
    "Project" : "12345",
    "Department" : "Sales",
    "Summary" : "TEST",
    "FirstName" : "Mary",
    "LastName" : "White",
    "activities" : [ 
        {
            "Type" : "Trip",
            "dateOfActivity" : ISODate("2020-12-20T06:00:00.000Z")
        }, 
        {
            "Type" : "Conference",
            "dateOfActivity" : ISODate("2021-01-05T06:00:00.000Z"),
            "Note" : "test"
        }
    ]

因此,我想运行一个查询来检索过去15天的所有与dateofActivity有关的信息。所以我使用了以下查询:

db.Test.find( { 'activities.dateOfActivity': { $lt: new Date(), $gte :new Date(new Date().setDate(new Date().getDate()-15)) }})

然后我注意到返回的记录并不局限于过去15天的所有活动。然后我尝试运行查询:

db.Test.find( { 'activities.dateOfActivity': { $gte : ISODate("2021-02-04T06:00:00.000Z")}})

这并不限制查询记录。返回的记录包含了2020年12/27/的一些数据。我在查询中哪里做错了?

另外,基于这个dateofActivity字段检索过去一个月的结果的最佳方法是什么?例如,如果我想在每月的第一天运行此报告以检索上个月的记录?

共有1个答案

庄瀚玥
2023-03-14

有几个选项用于筛选响应中的数组。

如果只想要匹配的第一个元素(这将适用于该示例文档),请在投影中使用$elemmatch:

db.Test.find( {'activities.dateOfActivity': { $gte: date2, $lte: date1 }}, {activities: {$elemMatch:{dateOfActivity:{$gte: date2, $lte: date1})

如果需要获得每个匹配的元素,就需要使用聚合。

    null
db.Test.aggregate([
   {$match: { 'activities.dateOfActivity':  { $gte: date2, $lte: date1 }}},
   {$unwind: "$activities"},
   {$match: { 'activities.dateOfActivity':  { $gte: date2, $lte: date1 }}}
])
    null
db.Test.aggregate([
   {$match: { "activities.dateOfActivity":  { $gte: date2, $lte: date1 }}},
   {$addFields: { 
         activities: {$filter: {
              input: "$activities",
              cond: {$and: [
                       {$gte: [ "$$this.dateOfActivity", date2]},
                       {$lte: [ "$$this.dateOfActivity", date1]}
              ]}
         }}
    }}
])
 类似资料:
  • 我试图在MongoDb上获取一个名为“fecha”的日志,其中包含一个日期字段。 在Java中执行代码后,我得到下一个查询: 但是我没有得到任何结果。以下是一些数据样本: 我的Java代码是下一个: 谢谢

  • 我有一个带有在线和离线日期的产品pojo 我使用以下查询来获取日期为空或日期为的所有产品。但是以下查询仅在时才返回我。 有线索吗?

  • 本实例使用有关日期处理和日期格式化的类实现一个日期查询的功能,即查询指定日期所在周的周一日期、两个指定日期间相差的天数和指定日期为所在周的星期几的日期 3 个功能。 从功能上来看,本实例至少需要定义 3 个方法,分别完成:获取指定日期所在周的周一日期、获取两个指定日期的相差天数以及获取指定日期为所在周的星期几的日期这 3 个功能,同时需要定义 Date 类型的日期与 String 类型之间的转换方

  • 如果日期相同,则使用进行查询将无法正常工作。它更像是。 但如果我给query param加上1秒,它就会工作。 下面是示例查询; 我有一个文档,它是时间戳。 此查询与日期为的文档相匹配,如果我将查询时间戳增加一个,如。 我正在使用mongo控制台,但我在php中遇到了与MongoDate相同的问题 编辑:查询的输出 edit2:问题是mongo的php扩展。它记录了“当文档发送到/从数据库发送时,

  • 问题内容: 我有这个SQL查询: 结果是这样的: 我现在的问题是我无法将DateCreated分组,因为它具有不同的时间。 我只想按日期分组。范例:2010-09-12 谢谢并恭祝安康… 问题答案: 我认为值得单独发布以下内容: 使用char转换来削减超时日期(广播或转换为varchar)比使用慢。我制定了[完整的脚本和性能测试结果以支持此断言 另外,请注意,您的GROUP BY列表与SELECT

  • 我试图在我的mongo DB中运行一个聚合语句。我有一个文档,其结构(至少)如下: 我想运行一个聚合语句,聚合给定'keyword groupid'和给定'date'间隔的'ranking'字段。 我一直在尝试使用以下聚合命令: 此命令执行时不会出错并返回结果。如果我尝试更改'keyword groupid'字段的值,该命令将返回一个不同的值,因此我假设$match语句适用于该字段(NumberL