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

日期范围之间的MongoDB查询-嵌套属性

酆出野
2023-03-14

如何编写查询以返回日期之间的对象?查询应搜索嵌套属性。我使用$gte$lte,但它似乎并不像我预期的那样工作。我想返回'task'对象,它在两个日期之间有history.starttime。

 db.tasks.find({'history.startTime' : { '$gte': ISODate("2017-02-04T00:00:00.000Z"), '$lt': ISODate("2017-02-05T23:00:00.000Z")} }).pretty()
    {
            "_id" : ObjectId("588f53c5d00baa2558fd56ae"),
            "desc" : "test3",
            "category" : "Category1",
            "project" : "Project1",
            "_creator" : "582afb3800c1bc1f203edf39",
            "history" : [
                    {
                            "startTime" : ISODate("2017-02-06T11:49:42.570Z"),
                            "stopTime" : ISODate("2017-02-06T11:49:45.725Z"),
                            "_id" : ObjectId("589862d9449b4629f8dbaba7"),
                            "dt" : 3.155
                    },
                    {
                            "startTime" : ISODate("2017-02-06T08:53:53.086Z"),
                            "stopTime" : ISODate("2017-02-06T11:47:58.098Z"),
                            "_id" : ObjectId("5898626e449b4629f8dbaba6"),
                            "dt" : 10445.012
                    },
                    {
                            "startTime" : ISODate("2017-01-30T15:30:46.287Z"),
                            "stopTime" : ISODate("2017-01-30T15:32:52.979Z"),
                            "_id" : ObjectId("588f5c2cd00baa2558fd56b0"),
                            "dt" : 126.692
                    },
                    {
                            "startTime" : ISODate("2017-01-30T13:55:09.738Z"),
                            "stopTime" : ISODate("2017-01-30T14:55:13.974Z"),
                            "_id" : ObjectId("588f53d1d00baa2558fd56af"),
                            "dt" : 3604.236
                    }
            ],
            "isCompleted" : false,
            "isPerforming" : false,
            "duration" : 14179.095000000001,
            "updated" : ISODate("2017-02-06T11:49:45.725Z"),
            "creationDate" : ISODate("2017-01-30T14:55:01.045Z"),
            "__v" : 4
    }

共有1个答案

龚勇锐
2023-03-14

它是一个数组。您的查询不起作用。您必须使用$elemmatch。

db.tasks.find({
    'history': {
        $elemMatch: {
            startTime: {
                $gte: ISODate("2017-02-04T00:00:00.000Z"),
                $lte: ISODate("2017-02-05T23:00:00.000Z")
            }
        }
    }
});
 类似资料:
  • 我的文档中有一个日期范围(使用日期对象)如下所示 我试图弄清楚如何构建一个查询来返回包含特定日期的所有事件,例如,像.... 如果查询显示类似这样的内容,但在Firestore查询限制下可能不可能出现这种情况。 因此,我一直在挠头几个小时,要么为此构建一个查询,要么以某种方式结构我的数据,以允许这样做。 这有可能吗?

  • 问题内容: 我的问题类似于以下问题: http://asktom.oracle.com/pls/asktom/f?p=100:11:0:::::P11_QUESTION_ID:14582643282111 区别在于我的内部查询返回两条记录,而我有外部查询。 我需要编写类似这样的内部查询,这将为我提供两个日期范围之间的日期列表(我正在尝试不执行此查询)。 我的内部查询返回以下2行: 所以我需要内部查

  • 问题内容: 我需要填充一个表,该表将存储2个给定日期之间的日期范围:09/01/11-10/10/11 因此,在这种情况下,该表将从2011年9月1日开始存储,直到每天存储到10/10/11,我想知道在SQL Server中是否有一种巧妙的方法-我目前正在使用SQL Server 2008 。 谢谢 问题答案: 在SQL 2005+上很容易;如果您有数字表或理货表,操作会更容易。我在下面伪造了它:

  • 我需要帮助查询与日期范围的长收集。请参阅下面的示例文档。我想用日期范围查询startTime字段。

  • > 每个对象表示一个重复发生的事件。该事件可以在多个日期发生。因此,请考虑以下内容: 我有一个日历在客户端,用户可以选择一个日期范围。 > 对所选日期范围的每个条目进行调用,并在客户端处理聚合。问题是会有大量的读取,因为我们会多次读取重叠的日期范围内的同一个列表对象。 尝试使用类似ElasticSearch/Algolia的服务来完成此操作 任何建议都会很有帮助!

  • 问题内容: 根据下表 输入变量将是开始日期和结束日期。例如 如何生成以下输出? 问题答案: 您要查找的内容通常称为交叉表查询。如果您要问的是如何在给定 静态 列列表的情况下构建交叉表查询,则可以执行以下操作: 同样,您可以使用Broken Link建议的PIVOT功能。但是,以上解决方案和PIVOT功能都依赖于 静态 列声明。如果您想要的是动态列列表(又称动态交叉表),那么您将超出T-SQL最初设