热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

在MongoDB的官方文档中关于Java操作的介绍,只给出了很简单的几个例子。这些例子虽然可以满足一定的需求,但是还并不是太完全。下面是我根据网页中的提示写的几个例子。1.背景。用JUnit4.8.2实现的单元测试的形式。测试数据:{uid:10,username:Jim,age:23
 在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的相结合可以得出比较复杂的查询条件。
推荐阅读
  • Allegro总结:1.防焊层(SolderMask):又称绿油层,PCB非布线层,用于制成丝网印板,将不需要焊接的地方涂上防焊剂.在防焊层上预留的焊盘大小要比实际的焊盘大一些,其差值一般 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 本文介绍了如何使用jQuery和AJAX来实现动态更新两个div的方法。通过调用PHP文件并返回JSON字符串,可以将不同的文本分别插入到两个div中,从而实现页面的动态更新。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • step1.为mongodb添加admin管理员root@12.154.29.163:~#mongoMongoDBshellversionv3.4.2connectingto:mo ... [详细]
  • 一、前言在数据库中,慢查询日志通常是用来进行优化数据库,MySQL中存在慢查询,Mongodb中也是如此。在Mongo中的慢查询属于Mon ... [详细]
  • 1.淘宝模拟登录2.天猫商品数据爬虫3.爬取淘宝我已购买的宝贝数据4.每天不同时间段通过微信发消息提醒女友5.爬取5K分辨率超清唯美壁纸6.爬取豆瓣排行榜电影数据(含GUI界面版) ... [详细]
  • Abp+MongoDb改造默认的审计日志存储位置
    一、背景在实际项目的开发当中,使用AbpZero自带的审计日志功能写入效率比较低。其次审计日志数据量中后期十分庞大,不适合与业务数据存放在一起。所以我们可以重新实现A ... [详细]
  • 今天我们学习,数据库mongodb的使用,最下面有mongodb的下载链接。pipinstallpymongo首先安装pymongo,然后在需要用到的地方importpymongo ... [详细]
  • MongoDB学习:(二)MongoDB简单使用
    MongoDB学习:(二)MongoDB简单使用MongoDB使用:执行mongodb的操作之前,我们需要运行命令,来进入操作命令界面&amp;amp;gt;mongo提示 ... [详细]
  •     系统采用jeeplus框架(ssm+redis+shiro+mongodb+redis),默认是做了JSP未做前后端分离,由于业务需要已经多终端使用的需求(H5、小程序等) ... [详细]
  • mongoDB高可用集群环境搭建
    2019独角兽企业重金招聘Python工程师标准在生产环境下,部署一台mongodb服务的话,会存在以下问题:单点问题生产环境是一个 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • jmeter实践:从csv中获取带引号的数据详情的技巧和运行全部数据的方法
    本文分享了jmeter实践中从csv中获取带引号的数据的解决办法,包括设置CSV Data Set Config和运行脚本获取数据的方法。另外还介绍了循环运行csv中全部数据的解决方法,避免每次修改csv用例都需要修改脚本的麻烦。通过了解和掌握工具的细节点,可以更好地解决问题和提高技术水平。 ... [详细]
author-avatar
sense宏江
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有