【问题标题】:MongoRepository JSON Date Query (Spring)MongoRepository JSON 日期查询 (Spring)
【发布时间】:2017-07-26 22:32:02
【问题描述】:

我正在尝试使用自己的查询来查询 mongo 存储库:

@Repository
public interface LogEntryRepository extends MongoRepository<LogEntry,String> {

    @Query("{'created_at' : {{ $gte: ISODate(?0)},{$lt: ISODate(?1)}}, " +
        "$or: [{'site': {$regex: ?2}}, {'login': {$regex: ?2}}, {'ip': {$regex: ?2}} ]" +
        "}")
    public Page<LogEntry> findByDateTimeBetweenAndCriteria(String isoStartDate, String isoEndDate, String searchTerm, Pageable page);

}

我想要实现的是使用关键字搜索过时的日志。以上抱怨解析错误:

        Caused by: com.mongodb.util.JSONParseException: 
    {'created_at' : { $gte: ISODate("_param_0"), $lt: ISODate("_param_1")}, $or: [{'site': {$regex: "_param_2"}}, {'login': {$regex: "_param_2"}}, {'ip': {$regex: "_param_2"}} ]}
                            ^

如果我用简单的?0 替换ISODate(?0),它会产生Page 1 of 0 containing UNKNOWN instances

字符串isoStartDate & isoEndDate 是从java.util.Date 生成的,看起来像这样2017-06-27T00:00:00.000Z

我如何在里面找到我的约会对象?

【问题讨论】:

    标签: mongodb spring-data spring-data-mongodb


    【解决方案1】:

    ISODate 是一个 Mongo shell 构造,用于创建 BSON 日期并且绝对不是有效的 JSON,我相信这是您抱怨的错误。

    按照answer 中的建议,尝试用{ '$date' : '?0' }{ '$date' : '?1' } 替换上述ISODate 调用。所有的字符串可能都需要用单引号括起来。

    【讨论】:

    • 即使这会导致 JSON 解析错误:@Query("{'created_at': {$date: ?0}}") 与 ?0 = 2017-06-28T00:00:00.000Z(字符串)。有什么想法吗?
    • @OrangePot 你应该在"$date"周围加上双引号
    • 我是否在$date 周围加上escape \" 似乎没有什么区别。当显示错误消息时,这个小符号^?0 下方
    • @OrangePot: 嗯...您可以尝试在 $date?0 周围加上单引号。
    • 我的查询现在看起来像这样,它修复了解析错误@Query("{'created_at': {$gte: {$date: '?0'}}}")?0 周围的单引号)和?0java.util.Date
    猜你喜欢
    • 1970-01-01
    • 2019-05-11
    • 2017-10-24
    • 2019-09-16
    • 1970-01-01
    • 1970-01-01
    • 2020-11-29
    • 2017-05-05
    • 2016-03-29
    相关资源
    最近更新 更多