首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Spring @ ISODate搜索ISODate

使用Spring @ ISODate搜索ISODate
EN

Stack Overflow用户
提问于 2021-04-07 19:19:46
回答 1查看 446关注 0票数 0

我有一个Spring连接到一个MongoDB数据库。我正在尝试使用Spring的@Aggregation来查找“托运”文档中的条目,该文档的"shipDate“日期晚于用户指定的日期。

下面是我的存储库的一个示例:

代码语言:javascript
复制
import org.springframework.data.mongodb.repository.Aggregation;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface ShipmentRepository extends MongoRepository<Shipment, String> {
    @Aggregation("{ '$match': { shipDate: {$gt: ISODate(?0)} } }")
    int findShippedAfterDate(String date);
}

作为date传递的值为"2020-06-16“。我使用的是@聚合,而不是@查询,因为一旦我让这个部分工作,就会在$match之后出现一个$match操作。

?0中使用ISODate()似乎不能正常工作,并导致以下错误:

JSON阅读器希望得到一个字符串,但找到了'?0‘

我尝试了以下语法变体:

  • shipDate: {$gt: ISODate('?0')}
  • shipDate: {$gt: ISODate('$?0')}

这两种情况都会导致以下错误,我认为这是由于?0实际上没有被值替换所致:

org.bson.json.JsonParseException:无效的日期格式。

我确信?0没有被字符串值替换的问题,因为当使用字符串而不是变量位置保持器时,查询按预期工作:

代码语言:javascript
复制
@Aggregation("{ '$match': { shipDate: {$gt: ISODate('2020-06-16')} } }")

我犯了一个简单的语法错误吗?谢谢你在这方面的帮助!

EN

回答 1

Stack Overflow用户

发布于 2021-04-09 18:17:30

通过使用$dateToString将存储在MongoDB中的ISODate转换为可以与用户提供的日期相匹配的字符串,然后使用$addFields将其添加到每个条目,我就能够做到这一点。不过,我相信这个方法可能有以下问题:

  • 效率低下,因为它将向每个返回的条目添加一个dateString字段.

我不确定这是否会成为一个问题,因为这取决于MongoDB在后面接$match时如何处理$addFields。如果它只将字段添加到由$match返回的条目中,则效率会高得多。

工作@Aggregation示例:

代码语言:javascript
复制
@Aggregation(pipeline = {
        "{ '$addFields': { 'dateString': { $dateToString: { format: '%Y-%m-%d', date: '$shipDate'} } }  }",
        "{ '$match': { dateString: {$gte: ?0} } }" })
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66992822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档