MongoDB详解--使用Java对MongoDB的分页查询,排序查询,比较运算条件查询

上一篇文章我们学习了使用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();
		}
	}

}

喜欢的朋友点个赞哦~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

stalin_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值