MongoRepository JSON 日期查询 (Spring)

Ora*_*Pot 2 mongodb spring-data spring-data-mongodb

我正在尝试使用自己的查询来查询 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);

}
Run Code Online (Sandbox Code Playgroud)

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

        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"}} ]}
                            ^
Run Code Online (Sandbox Code Playgroud)

如果我ISODate(?0)简单地将 the 替换为?0它会产生Page 1 of 0 containing UNKNOWN instances

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

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

Kda*_*awg 5

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

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