Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.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
spring data mongodb中的Datediff条件运算符不工作_Spring_Mongodb_Spring Data Mongodb - Fatal编程技术网

spring data mongodb中的Datediff条件运算符不工作

spring data mongodb中的Datediff条件运算符不工作,spring,mongodb,spring-data-mongodb,Spring,Mongodb,Spring Data Mongodb,在spring data mongodb的Criteria运算符中,两个日期之间的差值是否可以大于0?我写了下面的查询: Criteria c= Criteria.where("myDate").gte(startDate). andOperator(Criteria.where("myDate").lte(endDate).andOperator(Criteria.where("studentId").is(studentId).andOperator(Cri

在spring data mongodb的Criteria运算符中,两个日期之间的差值是否可以大于0?我写了下面的查询:

  Criteria c= Criteria.where("myDate").gte(startDate).
               andOperator(Criteria.where("myDate").lte(endDate).andOperator(Criteria.where("studentId").is(studentId).andOperator(Criteria.where("currDate - myDate").gt(0))));
此查询不起作用。 如果可能,请帮助我使用spring data mongodb进行此查询

编辑: mongodb管道查询如下:

 { "aggregate" : "__collection__" , "pipeline" : [ { "$match" : { "myDate" : { "$gte" : { "$date" : "2000-01-01T07:57:33.231Z"}} , "$and" : [ { "myDate" : { "$lte" : { "$date" : "2015-11-05T07:57:33.231Z"}} , "$and" : [ { "studentId" : "100" , "$and" : [ { "currDate - myDate" : { "$gt" : 0}}]}]}]}} , { "$project" : { "status" : 1}} , { "$group" : { "_id" : { "status" : "$status"} , "activeCount" : { "$sum" : 1}}}]}
问候


Kris

要使其正常工作,您基本上需要将当前聚合管道转换为:

var pipeline = [ 
    { 
        "$project" : { 
            "status" : 1,
            "studentId" : 1,
            "myDate" : 1,
            "dateDifference": { "$subtract": [ new Date(), "$myDate" ] }
        }
    },
    { 
        "$match" : { 
            "studentId": "100" ,
            "myDate": { 
                "$gte": ISODate("2000-01-01T07:57:33.231Z"),
                "$lte": ISODate("2015-11-05T07:57:33.231Z")
            },
            "dateDifference": { "$gt" : 0 }         
        }
    },   
    { 
        "$group": { 
            "_id": "$status",           
            "activeCount": { "$sum" : 1 }
        }
    }
];

db.collection.aggregate(pipeline);
Spring数据MongoDB等价物如下所示:

Criteria dateCriteria = new Criteria().andOperator(Criteria.where("myDate").gte(startDate).lte(endDate),
                                                   Criteria.where("dateDifference").gt(0));
Aggregation agg = Aggregation.newAggregation(       
    project("id", "status", "studentId", "myDate") 
        .andExpression("currDate - myDate").as("dateDifference"),
        //.and(currDate).minus("myDate").as("dateDifference"), <-- or use expressions
    match(Criteria.where("studentId").is("100").andOperator(dateCriteria)),
    group("status"), 
        .count().as("activeCount")
);
Criteria dateCriteria=new Criteria().andOperator(Criteria.where(“myDate”).gte(startDate).lte(endDate),
标准,其中(“日期差”).gt(0);
聚合agg=聚合。新聚合(
项目(“id”、“状态”、“学生id”、“我的日期”)
.并将(“当前日期-我的日期”)表示为(“日期差异”),

//和(当前日期)。减去(“我的日期”)作为(“日期差”),您可以向我们展示您试图实现的完整逻辑mongodb查询吗?添加mongodb查询将其显示为不工作,从查询返回的行为ZEROFYI currentDate不是java.util.Date类型,currDate是集合中的另一个字段。如果不工作,从查询返回的行为零。请告诉我如何编译spring data mongodb的where子句中是否有两个日期字段?请参考此链接,查询请