Spring Data MongoDB 两个日期之间的日期

标签 spring mongodb spring-data-mongodb

我正在使用 Spring Data for MongoDB 并获得以下类

class A {
    List<B> b;
}

class B {
    Date startDate;
    Date endDate;
}

当我保存 A 的对象时,它会像这样持久化

{
    "_id" : "DQDVDE000VFP8E39",
    "b" : [
          {
              "startDate" : ISODate("2009-10-05T22:00:00Z"),
              "endDate" : ISODate("2009-10-29T23:00:00Z")
          },
          {
              "startDate" : ISODate("2009-11-01T23:00:00Z"),
              "endDate" : ISODate("2009-12-30T23:00:00Z")
          }
    ]
}

现在我想在数据库中查询与 b 中的条目匹配的文档,其中给定日期在 startDate 和 endDate 之间。

Query query = new Query(Criteria.where("b").elemMatch(
    Criteria.where("startDate").gte(date)
    .and("endDate").lte(date)
);

这会产生以下 mongo 查询:

{
   "b": {
       "$elemMatch": { 
           "startDate" : { "$gte" : { "$date" : "2009-11-03T23:00:00.000Z"}}, 
           "endDate" : { "$lte" : { "$date" : "2009-11-03T23:00:00.000Z"}}
       }
   }
}

但不返回结果文档。有人知道我做错了什么吗?没看懂...

提前非常感谢您!!

最佳答案

如果您想查找 date 位于 b 数组元素的 startDateendDate 之间的文档那么您需要反转您的 gtelte 调用:

Query query = new Query(Criteria.where("b").elemMatch(
    Criteria.where("startDate").lte(date)
    .and("endDate").gte(date)
);

关于Spring Data MongoDB 两个日期之间的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12308756/

相关文章:

spring - 我无法在物化 View 上使用 dbunit 执行测试

php - 流明与 mongodb :getting error : Call to a member function prepare() on null

Ubuntu 16.04 Xenial 中的 PHP5.6-dev

mongodb - Spring boot 嵌入式 MongoDb 数据预填充

Java Spring applicationcontext 注册 BeanDefinition

spring - 无法从 Java Spring 中的 RSS Feed 接收数据

node.js - 在 mongoose 的计算中使用项目字段

java - Spring 数据蒙戈 |无法授权在没有字符串类型的情况下插入 system.indexes 文档

spring-data-mongodb - MongoDB 中的自定义类型映射

实现 Hibernate Search 时出现 Java 链接错误