Java实现对MongoDB的AND、OR和IN操作
来源:互联网 发布:语音朗读小说软件 编辑:程序博客网 时间:2024/06/03 15:38
转自:http://blog.csdn.net/mydeman/article/details/6652387
在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的相结合可以得出比较复杂的查询条件。
0 0
- java 包冲突解决方法
- 自己写浏览器和web服务器的分析!
- android ellipsize的使用
- HDU1166
- DSP28335—程序从flash复制到ram里的两种情况:部分复制和全部复制
- Java实现对MongoDB的AND、OR和IN操作
- android之windowSoftInputMode属性详解
- findViewById
- 获取当前进程的SE_DEBUG_NAME权限的状态,其他状态获取方法类似
- CSDN挑战编程——《金色十月线上编程比赛第二题:解密》
- wxython简单入门加实例1:wx.Window
- JavaWeb学习第一课(XML)-xml语法
- android 控件
- 在项目中获取系统日期转化为中国农历日历