热门标签 | 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的相结合可以得出比较复杂的查询条件。
推荐阅读
  • MongoDB核心概念详解
    本文介绍了NoSQL数据库的概念及其应用场景,重点解析了MongoDB的基本特性、数据结构以及常用操作。MongoDB是一个高性能、高可用且易于扩展的文档数据库系统。 ... [详细]
  • 本文介绍了如何使用Node.js通过两种不同的方法连接MongoDB数据库,包括使用MongoClient对象和连接字符串的方法。每种方法都有其特点和适用场景,适合不同需求的开发者。 ... [详细]
  • 本文探讨了如何在 Spring MVC 框架下,通过自定义注解和拦截器机制来实现细粒度的权限管理功能。 ... [详细]
  • 本文探讨了如何通过优化 DOM 操作来提升 JavaScript 的性能,包括使用 `createElement` 函数、动画元素、理解重绘事件及处理鼠标滚动事件等关键主题。 ... [详细]
  • 近期尝试从www.hub.sciverse.com网站通过编程手段获取数据时遇到问题,起初尝试使用WebBrowser控件进行数据抓取,但发现使用GET方法翻页时,返回的HTML代码始终相同。进一步探究后了解到,该网站的数据是通过Ajax异步加载的,可通过HTTP查看详细的JSON响应。 ... [详细]
  • Jupyter Notebook多语言环境搭建指南
    本文详细介绍了如何在Linux环境下为Jupyter Notebook配置Python、Python3、R及Go四种编程语言的环境,包括必要的软件安装和配置步骤。 ... [详细]
  • 小编给大家分享一下Vue3中如何提高开发效率,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获, ... [详细]
  • protobuf 使用心得:解析与编码陷阱
    本文记录了一次在广告系统中使用protobuf进行数据交换时遇到的问题及其解决过程。通过这次经历,我们将探讨protobuf的特性和编码机制,帮助开发者避免类似的陷阱。 ... [详细]
  • 实践指南:使用Express、Create React App与MongoDB搭建React开发环境
    本文详细介绍了如何利用Express、Create React App和MongoDB构建一个高效的React应用开发环境,旨在为开发者提供一套完整的解决方案,包括环境搭建、数据模拟及前后端交互。 ... [详细]
  • 在OpenShift上部署基于MongoDB和Node.js的多层应用程序
    本文档详细介绍了如何在OpenShift 4.x环境中部署一个包含MongoDB数据库和Node.js后端及前端的多层应用程序。通过逐步指导,读者可以轻松完成整个部署过程。 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • V8不仅是一款著名的八缸发动机,广泛应用于道奇Charger、宾利Continental GT和BossHoss摩托车中。自2008年以来,作为Chromium项目的一部分,V8 JavaScript引擎在性能优化和技术创新方面取得了显著进展。该引擎通过先进的编译技术和高效的垃圾回收机制,显著提升了JavaScript的执行效率,为现代Web应用提供了强大的支持。持续的优化和创新使得V8在处理复杂计算和大规模数据时表现更加出色,成为众多开发者和企业的首选。 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • MongoDB核心概念与基础知识解析
    MongoDB 是一种基于分布式文件存储的非关系型数据库系统,主要采用 C++ 语言开发。本文将详细介绍 MongoDB 的核心概念和基础知识,包括其与传统 SQL 数据库的区别,数据库及集合的基本操作,如数据的插入、更新、删除和查询等。通过本文,读者可以全面了解 MongoDB 的基本功能及其应用场景。 ... [详细]
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社区 版权所有