gpt4 book ai didi

Spring Boot自定义查询MongoDB

转载 作者:可可西里 更新时间:2023-11-01 10:37:11 26 4
gpt4 key购买 nike

我有这个 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 中工作,但是当我将其作为自定义查询放入 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();

我尝试在 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"));

但它不起作用,它向我返回所有用户,就像没有最后一个条件不等于 last_modifiedtime_created 一样。

有谁知道可能是什么问题?

最佳答案

我认为 Criteria 尚不支持此功能 - 检查此 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);

关于Spring Boot自定义查询MongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54668531/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com