Test Data
> db.users.find()
{ "_id" : ObjectId("id"), "ic" : "1001", "name" : "ant", "age" : 10 }
{ "_id" : ObjectId("id"), "ic" : "1002", "name" : "bird", "age" : 20 }
{ "_id" : ObjectId("id"), "ic" : "1003", "name" : "cat", "age" : 30 }
{ "_id" : ObjectId("id"), "ic" : "1004", "name" : "dog", "age" : 40 }
{ "_id" : ObjectId("id"), "ic" : "1005", "name" : "elephant", "age" : 50 }
{ "_id" : ObjectId("id"), "ic" : "1006", "name" : "frog", "age" : 60 }
BasicQuery example
BasicQuery query1 = new BasicQuery("{ age : { $lt : 40 }, name : 'cat' }");
User userTest1 = mongoOperation.findOne(query1, User.class);
System.out.println("query1 - " + query1.toString());
System.out.println("userTest1 - " + userTest1);
findOne example
Query query2 = new Query();
query2.addCriteria(Criteria.where("name").is("dog").and("age").is(40));
User userTest2 = mongoOperation.findOne(query2, User.class);
System.out.println("query2 - " + query2.toString());
System.out.println("userTest2 - " + userTest2);
find and $inc example
List<Integer> listOfAge = new ArrayList<Integer>();
listOfAge.add(10);
listOfAge.add(30);
listOfAge.add(40);
Query query3 = new Query();
query3.addCriteria(Criteria.where("age").in(listOfAge));
List<User> userTest3 = mongoOperation.find(query3, User.class);
System.out.println("query3 - " + query3.toString());
for (User user : userTest3) {
System.out.println("userTest3 - " + user);
}
find and $gt, $lt, $and example
Query query4 = new Query();
query4.addCriteria(Criteria.where("age").lt(40).and("age").gt(10));
List<User> userTest4 = mongoOperation.find(query4, User.class);
System.out.println("query4 - " + query4.toString());
for (User user : userTest4) {
System.out.println("userTest4 - " + user);
}
You can’t use Criteria.and() to add multiple criteria into the same field, to fix it, use Criteria.andOperator(), see updated example :
Query query4 = new Query();
query4.addCriteria(
Criteria.where("age").exists(true)
.andOperator(
Criteria.where("age").gt(10),
Criteria.where("age").lt(40)
)
);
List<User> userTest4 = mongoOperation.find(query4, User.class);
System.out.println("query4 - " + query4.toString());
for (User user : userTest4) {
System.out.println("userTest4 - " + user);
}
find and sorting example
Query query5 = new Query();
query5.addCriteria(Criteria.where("age").gte(30));
query5.with(new Sort(Sort.Direction.DESC, "age"));
List<User> userTest5 = mongoOperation.find(query5, User.class);
System.out.println("query5 - " + query5.toString());
for (User user : userTest5) {
System.out.println("userTest5 - " + user);
}
find and $regex example
Query query6 = new Query();
query6.addCriteria(Criteria.where("name").regex("D.*G", "i"));
List<User> userTest6 = mongoOperation.find(query6, User.class);
System.out.println("query6 - " + query6.toString());
for (User user : userTest6) {
System.out.println("userTest6 - " + user);
}
Method 2 : Generated Query Methods
public interface UserRepository
extends MongoRepository<User, String>, QueryDslPredicateExecutor<User> {
...
}
References
https://www.mkyong.com/mongodb/spring-data-mongodb-query-document/
http://www.baeldung.com/queries-in-spring-data-mongodb