您在使用 Spring Data MongoDB 时遇到了 InvalidMongoDbApiUsageException
异常,错误信息如下:
“由于 com.mongodb.BasicDocument 的限制,您无法添加第二个 ‘null’ 条件。查询已经包含 ‘{ “KaTeX parse error: Expected '}', got 'EOF' at end of input: …castTime" : { "lte” : { “KaTeX parse error: Expected 'EOF', got '}' at position 31: …4-21T16:00:00Z"}̲}, "and” : [{ “broadcastTime” : { “KaTeX parse error: Expected '}', got 'EOF' at end of input: gte" : { "date” : “2025-04-20T16:00:00Z”}}}]}, { “planBroadcastTime” : { “KaTeX parse error: Expected '}', got 'EOF' at end of input: lte" : { "date” : “2025-04-21T16:00:00Z”}}, “KaTeX parse error: Expected '}', got 'EOF' at end of input: …castTime" : { "gte” : { “$date” : “2025-04-20T16:00:00Z”}}}]}]}’”
这个错误是由使用 Criteria
API 构建 MongoDB 查询时的错误用法引起的。以下是问题的分析和解决方案。
问题分析
假设您的代码类似于以下形式,用于根据时间范围和回退条件查询数据:
Query query = new Query();
if (liveRoomReq.getStartTime() != null && liveRoomReq.getEndTime() != null) {
Criteria timeCriteria = new Criteria().orOperator(
Criteria.where("broadcastTime").lte(liveRoomReq.getEndTime())
.andOperator(Criteria.where("broadcastTime").gte(liveRoomReq.getStartTime())),
Criteria.where("planBroadcastTime").lte(liveRoomReq.getEndTime())
.andOperator(Criteria.where("planBroadcastTime").gte(liveRoomReq.getStartTime())