【转】Java实现对MongoDB的AND、OR和IN操作

MongoDB的官方文档中关于Java操作的介绍,只给出了很简单的几个例子。这些例子虽然可以满足一定的需求,但是还并不是太完全。下面是我根据网页中的提示写的几个例子。

       1.背景。用JUnit4.8.2实现的单元测试的形式。测试数据:

{uid:10,username:"Jim",age:23,agender:"male"}
{uid:27,username:"tom",age:13,agender:"male"}
{uid:12,username:"Jane",age:31,agender:"female"}
{uid:23,username:"Alex",age:47,agender:"male"}
{uid:109,username:"Lily",age:24,agender:"female"}

 

单元测试的初始化和清理工作,主要是建立数据库连接、写入测试数据、清理测试数据:

	private static List<BasicDBObject> documents = new ArrayList<BasicDBObject>();
	private static DBCollection coll;
	
	@BeforeClass
	public static void init(){
		try {
			
			initConnection();
			
			loadData();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	private static void initConnection() throws UnknownHostException, MongoException{
		//Create a connection to Collection 'user'
		Mongo mongo = new Mongo("localhost", 27017);
		DB db = mongo.getDB("test");
		coll = db.getCollection("user");
	}
	
	private static void loadData() throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(MongoTest.class.getResourceAsStream("data")));
		String line = null;
		while((line = br.readLine()) != null){
			JSONObject jo = new JSONObject(line);
			
			//Convert JSONObject into BasicDBObject
			BasicDBObject dbObject = new BasicDBObject();
			Iterator<String> joKeys = jo.keys();
			while(joKeys.hasNext()){
				String key = joKeys.next();
				dbObject.put(key, jo.get(key));
			}
			
			documents.add(dbObject);
		}
	}
	
	@Before
	public void setUp(){
		//Insert all data into MongoDB
		for(BasicDBObject bdo : documents){
			coll.insert(bdo);
		}
	}
	
	@After
	public void cleanUp(){
		//Drop the collection to remove all data.
		//Note: it's not recommended.
		coll.drop();
	}

 2. AND是比较简单的。

 

 

 

	@Test
	public void testAnd(){
		//agender='female' AND age > 27	
		DBObject queryCondition = new BasicDBObject();
		queryCondition.put("agender", "female");
		queryCondition.put("age", new BasicDBObject("$gt", 27));
		DBCursor dbCursor = coll.find(queryCondition);
		assertEquals(1, dbCursor.size());
		assertEquals("Jane", dbCursor.next().get("username"));
	}

 

 3.单个字段的OR操作。

	@Test
	public void testOrSingleField(){
		DBObject queryCondition = new BasicDBObject();		
		//age<15 OR age>27
		queryCondition = new BasicDBObject();
		BasicDBList values = new BasicDBList();
		values.add(new BasicDBObject("age", new BasicDBObject("$gt", 27)));
		values.add(new BasicDBObject("age", new BasicDBObject("$lt", 15)));
		queryCondition.put("$or", values);
		
		DBCursor dbCursor = coll.find(queryCondition);
		assertEquals(3, dbCursor.size());
		assertEquals("tom", dbCursor.next().get("username"));
	}

  4. 多个字段之间的OR操作

 

 

 

	@Test
	public void testOrMultiFields(){
		DBObject queryCondition = new BasicDBObject();		
		//agender=female OR age<=23
		queryCondition = new BasicDBObject();
		BasicDBList values = new BasicDBList();
		values.add(new BasicDBObject("agender", "female"));
		values.add(new BasicDBObject("age", new BasicDBObject("$lte", 23)));
		queryCondition.put("$or", values);
		
		DBCursor dbCursor = coll.find(queryCondition);
		assertEquals(4, dbCursor.size());
		assertEquals("Jim", dbCursor.next().get("username"));
	}

 

 5. 单个字段的IN操作。对于类似 where age=13 OR age=47的查询条件,就可以考虑使用IN代替

 

	@Test
	public void testIn(){
		DBObject queryCondition = new BasicDBObject();		
		//age in [13, 47]
		queryCondition = new BasicDBObject();
		BasicDBList values = new BasicDBList();
		values.add(13);
		values.add(47);
		queryCondition.put("age", new BasicDBObject("$in", values));
		
		DBCursor dbCursor = coll.find(queryCondition);
		assertEquals(2, dbCursor.size());
		assertEquals("tom", dbCursor.next().get("username"));
	}

 

   从以上几个例子可以看出,通过BasicDBList与BasicDBObject的相结合可以得出比较复杂的查询条件。

 

转自:http://blog.csdn.net/mydeman/article/details/6652387

产品经理必备知识——API接口 在古代,我们的传输信息的方式有很多,比如写信、飞鸽传书,以及在战争中使用的烽烟,才有了著名的烽火戏诸侯,但这些方式传输信息的效率终究还是无法满足高速发展的社会需要。如果你选择允许,app就会根据你的当前位置为你提供更加个性化的一些服务,当然也有一些app拿到你的位置信息做出损害用户利益的行为,所以还是需要谨慎授权。首先,看接口文档的场景一般是自身业务模块需要获取外部的数据,但又不想自己重新开发,寻找外部已经实现的有开放能力的供应商(包含企业内部的)。通过发送请求响应消息的方式实现程序间的通信。 阅读详情

相关推荐

Java实现MongoDBOR操作

MongoDB中,OR操作用于执行多个条件之间的逻辑或(OR操作。通过使用Java编程语言,我们可以轻松地实现MongoDBOR操作。下面是一个详细的代码示例,展示了如何在Java中执行MongoDBOR操作。通过使用MongoDBJava驱动程序,我们可以轻松地在Java应用程序中执行各种MongoDB操作,包括OR操作。接下来,我们将创建一个Java类来实现MongoDBOR操作。我们将使用MongoDBJava驱动程序提供的API来连接到MongoDB数据库,并执行OR操作

ByteNinja的博客 599

Java实现MongoDBANDORIN操作

MongoDB的官方文档中关于Java操作的介绍,只给出了很简单的几个例子。这些例子虽然可以满足一定的需求,但是还并不是太完全。下面是我根据网页中的提示写的几个例子。 1.背景。用JUnit4.8.2实现的单元测试的形式。测试数据: {uid:10,username:"Jim",age:23,agender:"male"} {uid:27,username:"tom",age:13...

suoyihen 404

毕业设计 基于区块链的中药溯源系统源码+详细说明+全部数据资料 高分项目.zip

【资源说明】毕业设计 基于区块链的中药溯源系统源码+详细说明+全部数据资料 高分项目.zip毕业设计 基于区块链的中药溯源系统源码+详细说明+全部数据资料 高分项目.zip【备注】1、该项目是高分毕业设计项目源码,已获导师指导认可通过,答辩评审分达到95分2、该资源内项目代码都经过mac/window10/11/linux测试运行成功,功能ok的情况下才上传的,请放心下载使用!3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。欢迎下载,沟通交流,互相学习,共同进步!

MongoDB:在 Java 中使用 MongoDB

除了通过启动 mongo 进程进如 Shell 环境访问数据库外,MongoDB 还提供了其他基于编程语言的访问数据库方法。MongoDB 官方提供了 Java 语言的驱动包,利用这些驱动包可使用多种编程方法来连接并操作 MongoDB 数据库。 想要在 Java 程序中使用 MongoDB,需要确保您的电脑上已经安装了 MongoDB,并搭建好了 Java 的环境。 本篇内容主要介绍:Java 实现对 MongDB 的操作Java 操作 MongoDB 数据库 Demo

栗筝i的博客 1万+

MongoDB学习(java版)

mongodb系统学习笔记

java学习相关内容 2704

java mongodb 大于_Java实现MongoDBANDORIN操作 ,大于、小于等判断

MongoDB的官方文档中关于Java操作的介绍,只给出了很简单的几个例子。这些例子虽然可以满足一定的需求,但是还并不是太完全。下面是我根据网页中的提示写的几个例子。1.背景。用JUnit4.8.2实现的单元测试的形式。测试数据:{uid:10,username:"Jim",age:23,agender:"male"}{uid:27,username:"tom",age:13,agender:"...

weixin_34553878的博客 1641

mongo java in_Java实现MongoDBANDORIN操作

很全的JAVA操作mongodb:http://www.blogjava.net/xiaomage234/archive/2012/08/06/384904.html的:AND:public void testAnd(){//agender='female' AND age > 27DBObject queryCondition = new BasicDBObject();queryCon...

weixin_35789885的博客 229

mongodb java and or,Java实现MongoDBANDORIN操作

的:AND:public void testAnd(){//agender='female' AND age > 27DBObject queryCondition = new BasicDBObject();queryCondition.put("agender", "female");queryCondition.put("age", new BasicDBObject("$gt", ...

weixin_39791152的博客 158

MongoDB】-Java实现mongodbAndOrIn操作

1)And(同时满足多个条件时用And)public void testAnd(){ DBObject queryCondition = new BasicDBObject(); //agender='female' AND age > 27 queryCondition.put("agender", "female"); quer

小飞飞的专栏 3445

mongodb java or 查询_Java 实现mongodb and or and or联合查询操作

载:AND:public void testAnd(){//agender='female' AND age > 27DBObject queryCondition = new BasicDBObject();queryCondition.put("agender", "female");queryCondition.put("age", new BasicDBObject("$gt", ...

weixin_35965062的博客 487

java mongodb $in_Mongodb采用$in方式提升操作效率

Mongodb操作里许多人喜欢采用PHP的循环操作,这种方式效率非常低下,可以优化。1、查询:有两种方式,在PHP里循环查询使用$in的方式。做一个查询1000条数据的示例如下:// 循环查询for($i = 0; $i < count($array); $i++) {$item = $collection -> findOne(array("_id" => new Mongo...

weixin_32893479的博客 1149

java mongo updateone_请问如何使用java操作mongodb更新整个文档

翻过高山走不出你这几个类分别是:DBCollection类:指定数据库中指定集合的实例,提供了增删改查等一系列操作。在关系型数据库中,对数据的增删改查操作是建立在表的基础上的,在mongodb中是建立在集合的基础上进行的。DBObject接口:DBObject是键值的映射,因此,可以将DBObject的实现类作为查询的返回结果,也可以作为查询条件DBCursor:游标,返回结果的集合。下面是部分实...

weixin_34959044的博客 1126

mongo javaandor多条件查询

//andor多条件联合查询         //age条件(and条件)         BasicDBList condList = new BasicDBList();          BasicDBObject cond = new BasicDBObject();         cond.put("$gt",0);         cond.put("$lte",40);

subuser的专栏 1万+

MongoDBJava-MongoTemplate分页查询+Or查询

分页查询: 创建分页请求: 记得一定要手动给他page-1 Pageable pageable = PageRequest.of(page-1,limit,Sort.by(Sort.Order.desc("created"))); 然后 将分页请求with加进去query就可以了 Query query = Query.query().with(pageable); Or查询的使用: 首先创建一个:条件对象 Criteria criteria = new Criteria(); 在条件对象中添加Or

m0_49194578的博客 1224

java mongodb $in_【mongoDBJava中使用条件操作符进行查询

查询时经常会用到$in之类的操作符,比如db.collection_0.find("_id":{"$in","0001","0002","0003"})。但是shell归shell,java里应该怎么写,在这就拿$in作为例子。PS:我喜欢$in,尤其key是一个array类型的时候。我用的是mongo-java-driver 2.11.0现在我有个collection叫col_0,然后我在里面存...

weixin_35699301的博客 1068

mongo中的or查询如何使用

mongo中的or查询如何使用

w的博客 5593
上一篇: 【转】最新版本spring框架下载说明
下一篇: 【转】MongoDB高级查询用法大全
mib_2012
博客等级 码龄14年 0粉丝 113原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值