Весенний загрузочный пользовательский запрос MongoDB

У меня есть этот запрос 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"] }}
    ]
})

Он работает в Robo3T, но когда я помещаю его в весеннюю загрузку как пользовательский запрос, он выдает ошибку при запуске проекта.

@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();

Я пытался сделать запрос с 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"));

но это не работает, он возвращает мне всех пользователей, как будто нет этого последнего критерия, не равного last_modified а также time_created,

Кто-нибудь знает в чем может быть проблема?

1 ответ

Я думаю, что эта функция еще не поддерживается критериями - проверьте это https://jira.spring.io/browse/DATAMONGO-1845. Одним из обходных путей является передача необработанного запроса через 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);
Другие вопросы по тегам