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

简介:        在MongoDB的官方文档中关于Java操作的介绍,只给出了很简单的几个例子。这些例子虽然可以满足一定的需求,但是还并不是太完全。下面是我根据网页中的提示写的几个例子。        1.背景。
       在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的相结合可以得出比较复杂的查询条件。




目录
相关文章
|
NoSQL JavaScript 前端开发
Java访问MongoDB
Java访问MongoDB
286 21
|
SQL NoSQL Java
Java使用sql查询mongodb
通过MongoDB Atlas Data Lake或Apache Drill,可以在Java中使用SQL语法查询MongoDB数据。这两种方法都需要适当的配置和依赖库的支持。希望本文提供的示例和说明能够帮助开发者实现这一目标。
724 17
|
SQL NoSQL Java
Java使用sql查询mongodb
通过使用 MongoDB Connector for BI 和 JDBC,开发者可以在 Java 中使用 SQL 语法查询 MongoDB 数据库。这种方法对于熟悉 SQL 的团队非常有帮助,能够快速实现对 MongoDB 数据的操作。同时,也需要注意到这种方法的性能和功能限制,根据具体应用场景进行选择和优化。
719 9
|
NoSQL Java 数据库连接
MongoDB Java
10月更文挑战第18天
367 3
|
存储 JSON NoSQL
Java 中MongoDB的使用
Java 中MongoDB的使用
228 2
|
NoSQL JavaScript Java
Java Python访问MongoDB
Java Python访问MongoDB
192 4
|
NoSQL Java 关系型数据库
MongoDB保姆级指南(下):无缝集成SpringData框架,一篇最全面的Java接入指南!
前面的两篇文章已经将MongoDB大多数知识进行了阐述,不过其中的所有内容,都基于原生的MongoDB语法在操作。可是,在实际的日常开发过程中,我们并不会直接去接触MongoDB,毕竟MongoDB只能算作是系统内的一个组件,无法仅依靠它来搭建出一整套系统。
1302 1
|
NoSQL MongoDB 数据库
数据库数据恢复—MongoDB数据库数据恢复案例
MongoDB数据库数据恢复环境: 一台操作系统为Windows Server的虚拟机上部署MongoDB数据库。 MongoDB数据库故障: 工作人员在MongoDB服务仍然开启的情况下将MongoDB数据库文件拷贝到其他分区,数据复制完成后将MongoDB数据库原先所在的分区进行了格式化操作。 结果发现拷贝过去的数据无法使用。管理员又将数据拷贝回原始分区,MongoDB服务仍然无法使用,报错“Windows无法启动MongoDB服务(位于 本地计算机 上)错误1067:进程意外终止。”
|
缓存 NoSQL Linux
在CentOS 7系统中彻底移除MongoDB数据库的步骤
以上步骤完成后,MongoDB应该会从您的CentOS 7系统中被彻底移除。在执行上述操作前,请确保已经备份好所有重要数据以防丢失。这些步骤操作需要一些基本的Linux系统管理知识,若您对某一步骤不是非常清楚,请先进行必要的学习或咨询专业人士。在执行系统级操作时,推荐在实施前创建系统快照或备份,以便在出现问题时能够恢复到原先的状态。
1326 79
|
存储 NoSQL MongoDB
MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉
MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉
478 8
MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉

推荐镜像

更多