数据库

 首页 > 数据库 > MongoDB > Java程序如何对MongoDB的进行AND、OR和IN操作

Java程序如何对MongoDB的进行AND、OR和IN操作

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

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 documents = new ArrayList();
        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 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的相结合可以得出比较复杂的查询条件。 Java程序如何对MongoDB的进行AND、OR和IN操作
分享到:
封装Thrift相关操作的PHP类
封装Thrift相关操作的PHP类 最近研究Thrift了一段时间,对Thrift的server端和client端操作的代码进行了稍微封装,这样编写一个后台服务器的时候,就专心写业务逻辑就行了,对thrift内部服务器代码不用关心,因为这些代码都是通用的。 如果你不知道thrift是什么东东,我之前有写一个简单示例:thrift入门hello示例 我...
MongoDB集群相关操作
MongoDB集群相关操作 MongoDB replica Set配置说明 MongoDB在1.6版本对开发了新功能replica set,这比之前的replication功能要强大一些,auto shard已经明确说明不支持replication paris,建议使用replica set,replica set故障切换完全自动,各个DB之间数据完全一致,大大降低了维护成功。 replica set 配置如下: 1...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……