Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Mongodb从特定月份获取记录_Java_Mongodb - Fatal编程技术网

Java Mongodb从特定月份获取记录

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

我在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 
                                  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