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

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

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;@BeforeClasspublic 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 BasicDBObjectBasicDBObject dbObject = new BasicDBObject();Iterator<String> joKeys = jo.keys();while(joKeys.hasNext()){String key = joKeys.next();dbObject.put(key, jo.get(key));}documents.add(dbObject);}}@Beforepublic void setUp(){//Insert all data into MongoDBfor(BasicDBObject bdo : documents){coll.insert(bdo);}}@Afterpublic void cleanUp(){//Drop the collection to remove all data.//Note: it’s not recommended.coll.drop();} 2. AND是比较简单的。@Testpublic void testAnd(){//agender=’female’ AND age > 27DBObject 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操作。@Testpublic void testOrSingleField(){DBObject queryCondition = new BasicDBObject();//age<15 OR age>27queryCondition = 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操作

@Testpublic void testOrMultiFields(){DBObject queryCondition = new BasicDBObject();//agender=female OR age<=23queryCondition = 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代替@Testpublic 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的相结合可以得出比较复杂的查询条件。

人生就像是一场旅行,遇到的既有感人的,

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

相关文章:

你感兴趣的文章:

标签云: