本文介绍了Spring Boot mongoDB喜欢在数字字段上查询-整数/双精度的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想在Spring Boot中对Integer/Double字段进行LIKE查询.
集合名称:玩家
I want to make LIKE query on Integer / Double field in spring boot.
Collection name : players
{
"firstName" : "Lionel",
"lastName" : "messi",
"team" : "FC Barcelona",
"salary" : 40000,
"type" : "football"
},{
"firstName" : : "Cristiano",
"lastName" : "Ronaldo",
"team" : "Real Madrid C.F.",
"salary" : 35000,
"type" : "football"
},{
"firstName" : : "Neymar",
"lastName" : "Jr",
"team" : "Paris Saint-Germain F.C.",
"salary" : 25000,
"type" : "football"
},{
"firstName" : "Luis",
"lastName" : "Alberto",
"team" : "FC Barcelona",
"salary" : 25000,
"type" : "football"
},{
"firstName" : "Virat",
"lastName" : "Kohali",
"team" : "Indian Cricket Team",
"salary" : 40000,
"type" : "cricket"
}
下面是我的spring java代码,它会生成查询.
And my spring java code as follows which generate query.
String game = "football";
String team = "barcelona";
Double salary = 250;
Query query = new Query();
Set<String> gameType = new HashSet<>();
List<Criteria> andCriteria = new ArrayList<>();
gameType.add(game);
andCriteria.add(Criteria.where("type").in(gameType));
andCriteria.add(Criteria.where("team").regex(team,"i"));
Criteria[] criteriaArray = new Criteria[andCriteria.size()];
criteriaArray = andCriteria.toArray(criteriaArray);
query.addCriteria(new Criteria().andOperator(criteriaArray));
List<Players> players = mongoTemplate.find(query, Players.class);
return players;
查询:
db.players.find({
$and: [{
"type": {
$in: ["football"]
}
},
{
"team": {
$regex: "barcelona",
$options: "i"
}
}]
})
上面的查询向我返回了2个文档,分别是类型",例如足球"和团队",例如巴塞罗那
Above query returns me 2 documents for "type" as "football" and "team" like barcelona
{"firstName" : "Lionel", "lastName" : "messi", "team" : "FC Barcelona", "salary" : 40000, "type" : "football"},
{"firstName" : "Luis", "lastName" : "Alberto", "team" : "FC Barcelona", "salary" : 25000, "type" : "football"}
但是我想在其中查询类型"为足球"和薪水",例如 250
But I want query "type" as "football" and "salary" like 250 in it
db.players.find({
$and: [{
"type": {
$in: ["football"]
}
},
{
$where : "/^250.*/.test(this.salary)"
}]
})
,返回结果如下.
{"firstName" : : "Neymar", "lastName" : "Jr", "team" : "Paris Saint-Germain F.C.", "salary" : 25000, "type" : "football"},
{"firstName" : "Luis", "lastName" : "Alberto", "team" : "FC Barcelona", "salary" : 25000, "type" : "football"}
谢谢.
推荐答案
我设法在double字段上构建了LIKE查询.
I managed to build LIKE query on double field.
Query query = new Query();
Set<String> gameType = new HashSet<>();
List<Criteria> andCriteria = new ArrayList<>();
String game = "football";
int salary = 250;
gameType.add(game);
andCriteria.add(Criteria.where("type").in(gameType));
andCriteria.add(Criteria.where("$where").is("/^" + salary + ".*/.test(this.salary)"));
Criteria[] criteriaArray = new Criteria[andCriteria.size()];
criteriaArray = andCriteria.toArray(criteriaArray);
query.addCriteria(new Criteria().andOperator(criteriaArray));
List<Players> players = mongoTemplate.find(query, Players.class);
return players;
正如我上面发布的,此代码段生成了LIKE.
您也可以用简单的方式做到这一点.
This code snippet generate LIKE as I posted above.
Also you can do it in simple way.
Query query = new Query();
Set<String> gameType = new HashSet<>();
String game = "football";
int salary = 250;
gameType.add(game);
query.addCriteria(Criteria.where("type").in(gameType));
query.addCriteria(Criteria.where("$where").is("/^" + salary + ".*/.test(this.salary)"));
List<Players> players = mongoTemplate.find(query, Players.class);
return players;
我希望这会有所帮助.
这篇关于Spring Boot mongoDB喜欢在数字字段上查询-整数/双精度的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!