简体   繁体   English

Spring Boot 自定义查询 MongoDB

[英]Spring boot custom query MongoDB

I have this MongoDb query:我有这个 MongoDb 查询:

db.getCollection('user').find({
    $and : [
        {"status" : "ACTIVE"},
        {"last_modified" : { $lt: new Date(), $gte: new Date(new Date().setDate(new Date().getDate()-1))}},
        {"$expr": { "$ne": ["$last_modified", "$time_created"] }}
    ]
})

It works in Robo3T, but when I put this in spring boot as custom query, it throws error on project start.它适用于 Robo3T,但是当我将它作为自定义查询放入 Spring Boot 时,它会在项目启动时引发错误。

@Query("{ $and : [ {'status' : 'ACTIVE'}, {'last_modified' : { $lt: new Date(), $gte: new Date(new Date().setDate(new Date().getDate()-1))}}, {'$expr': { '$ne': ['$last_modified', '$time_created']}}]}")
    public List<User> findModifiedUsers();

I tried to make query with Criteria in spring:我尝试在春季使用Criteria进行查询:

Query query = new Query();
Criteria criteria = new Criteria();  
criteria.andOperator(Criteria.where("status").is(UserStatus.ACTIVE), Criteria.where("last_modified").lt(new Date()).gt(lastDay), Criteria.where("time_created").ne("last_modified"));

but it doesn't work, it returns me all users like there is no this last criteria not equal last_modified and time_created .但它不起作用,它返回给我所有用户,就像没有这最后一个条件不等于last_modifiedtime_created

Does anyone know what could be problem?有谁知道可能有什么问题?

I think that this feature is not supported yet by Criteria - check this https://jira.spring.io/browse/DATAMONGO-1845 .我认为 Criteria 尚不支持此功能 - 检查此https://jira.spring.io/browse/DATAMONGO-1845 One workaround is to pass raw query via mongoTemplate like this:一种解决方法是通过 mongoTemplate 传递原始查询,如下所示:

BasicDBList expr = new BasicDBList();
expr.addAll(Arrays.asList("$last_modified","$time_created")); 

BasicDBList and = new BasicDBList();
and.add(new BasicDBObject("status","ACTIVE"));
and.add(new BasicDBObject("last_modified",new BasicDBObject("$lt",new Date()).append("$gte",lastDate)));
and.add(new BasicDBObject("$expr",new BasicDBObject("$ne",expr)));

Document document = new Document("$and",and); 
FindIterable<Document> result = mongoTemplate.getCollection("Users").find(document);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM