Java Mongodb从特定月份获取记录
我在mongodb 3.4中使用mongo java驱动程序mongo-java-driver-2.12.4.jar 我想找一个特定月份(比如08年8月)的打印机检查Java Mongodb从特定月份获取记录,java,mongodb,Java,Mongodb,我在mongodb 3.4中使用mongo java驱动程序mongo-java-driver-2.12.4.jar 我想找一个特定月份(比如08年8月)的打印机检查 由于某些原因,查询未返回任何结果。 我需要与java兼容的代码(driver-2.12.4) 示例数据库: 基本上在SQL中: SELECT * FROM printerInspections WHERE MONTH(inspectionDate) = X a
由于某些原因,查询未返回任何结果。
我需要与java兼容的代码(driver-2.12.4) 示例数据库: 基本上在SQL中:
SELECT * FROM printerInspections WHERE MONTH(inspectionDate) = X
and inspectionDeleted =false
当前代码:
DBObject getInspectionOfMonth(String printerId,int month){
DBCollection collection = mongoTemplate.getCollection("printerInspections");
DBObject clause1 = new BasicDBObject("inspectionDeleted", false);
DBObject clause2 = new BasicDBObject("printerId", printerId);
DBObject clause3 = new BasicDBObject("inspectionDate", "{$month:"+month+"}");
BasicDBList andClause = new BasicDBList();
andClause.add(clause1);
andClause.add(clause2);
andClause.add(clause3);
BasicDBObject b = new BasicDBObject("$and", andClause);
DBObject dBObject = collection.findOne(b);
return dBObject;
}
更改第3条:
DBObject monthClause = new BasicDBObject("month", month);
DBObject clause3 = new BasicDBObject("inspectionDate", monthClause);
当我们将
日期
与字符串
进行比较时,问题肯定在第3条
中。例如,如果月份传递为8,则计算的字符串将变成“{$month:8}”
这里的要求是从inspectionDate
获取月份,并将其与传递的month
参数进行比较。
因此,正确的第3条如下:
DBObject clause3 = new BasicDBObject("$expr",
new BasicDBObject("$eq", Arrays.asList(new BasicDBObject("$month", "$inspectionDate"), month)));
请在提问时添加示例数据库集合和预期的输入/输出,这有助于更好地理解问题其抛出:uncategorizedmongodbeexception:无法规范化查询:BadValue:未知顶级运算符:$expr;嵌套异常为com.mongodb.MongoException:无法规范化查询:BadValue@user648026您使用的是哪个mongo版本?Mongodb版本3.4我们可以在3.6中使用$expr