上一篇文章我们学习了使用Java对MongoDB进行基本的增删改查操作。这次我们进一步来学习如何使用Java对MongoDB进行复杂查询。其中包含对查询出的文档按照某个字段进行排序。对查询出的文档进行条数的限制(适用于分页)以及比较运算符(>,>=,<,<,<=,!=)的使用。下面我将实例代码贴出来,我已经将注释在代码中标注。同学们可以按照这个进行揣摩和理解。
注:
1.为什么在条件排序后需要加上limit限制条数:因为排序后的文档数量可能过大,超过最大缓存32M,大家可以百度来增大缓存,或者像我一样加个limit限制,在不影响业务的前提下。
public class QueryMain {
public static void main(String[] args) {
// 查询限制条数,limit的使用
findDocumentByLimit();
// 查询按照某个条件倒序排列,sort的使用
findDocumentBySort();
// 查询带有比较运算条件>,>=,<,<=,!=的使用
findDocumentByRelation();
}
// 进行分页查询,限制查询出的数据条数
public static void findDocumentByLimit() {
try {
MongoClient mongoClient = MongoUtils.mongoClient;
MongoDatabase database = mongoClient.getDatabase("testDB");
MongoCollection<Document> collection = database.getCollection("testCollection");
// 组装文档
BasicDBObject searchDoc = new BasicDBObject().append("id", 1);
// 进行查询
FindIterable<Document> find = collection.find(searchDoc).limit(10);
for (Document document : find) {
System.out.println(document.getInteger("id") + "\t" + document.getString("name") + "\t"
+ document.getString("sex") + "\t" + document.getDate("date"));
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 按照某个条件排序查询,并限制查询的条数。 sort('字段名',num)方法的参数num为排序的方式,1为升序,-1为降序
*/
public static void findDocumentBySort() {
try {
MongoClient mongoClient = MongoUtils.mongoClient;
MongoDatabase database = mongoClient.getDatabase("testDB");
MongoCollection<Document> collection = database.getCollection("testCollection");
// 组装文档
BasicDBObject searchDoc = new BasicDBObject().append("id", 1);
// 查询,排序并限制条数(查询的数量太大进行排序会导致内存溢出而报错)
FindIterable<Document> find = collection.find(searchDoc).sort(new Document().append("id", -1)).limit(10);
for (Document document : find) {
System.out.println(document.getInteger("id") + "\t" + document.getString("name") + "\t"
+ document.getString("sex") + "\t" + document.getDate("date"));
}
} catch (Exception e) {
e.printStackTrace();
}
}
// 带有比较运算符的条件查询,并限制查询的条数
public static void findDocumentByRelation() {
try {
MongoClient mongoClient = MongoUtils.mongoClient;
MongoDatabase database = mongoClient.getDatabase("testDB");
MongoCollection<Document> collection = database.getCollection("testCollection");
// 组装文档,将关系运算符嵌套在条件中。
// 大于:$gt,大于等于:$gte,小于:$lt,小于等于:$lte,不等于:$ne
BasicDBObject searchDoc = new BasicDBObject().append("id", new Document().append("$lt", 10));
// 查询限制条数(查询的数量太大进行排序会导致内存溢出而报错)
FindIterable<Document> find = collection.find(searchDoc).limit(10);
for (Document document : find) {
System.out.println(document.getInteger("id") + "\t" + document.getString("name") + "\t"
+ document.getString("sex") + "\t" + document.getDate("date"));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
喜欢的朋友点个赞哦~~