zoukankan      html  css  js  c++  java
  • java mongodb 基础系列---查询,排序,limit,$in,$or,输出为list,创建索引,$ne 非操作

    官方api教程http://docs.mongodb.org/ecosystem/tutorial/getting-started-with-java-driver/#getting-started-with-java-driver

    package com.infomorrow.webroot;
    
    import java.util.List;
    
    import com.mongodb.BasicDBObject;
    import com.mongodb.DB;
    import com.mongodb.DBCollection;
    import com.mongodb.DBCursor;
    import com.mongodb.DBObject;
    import com.mongodb.MongoClient;
    
    public class test_mongodb {
        public static void  main(String args[]) throws Exception {
            MongoClient        mongoClient = new MongoClient( "127.0.0.1" , 27017 );//建立连接
            DB get_db_credit = mongoClient.getDB("credit_2");//数据库名
            DBCollection collection = get_db_credit.getCollection("report");//集合名,对应mysql中的表名
            BasicDBObject filter_dbobject = new BasicDBObject();
            
            //建立查询条件,如果还有其他条件,类似的写即可
            // 如:version=3,filter_dbobject.put("version", 3),mongod区分String 和 Integer类型,所以要小心"3"!=3
            filter_dbobject.put("user_id", "10065716153075");
           
            //下面执行查询,设置limit,只要10条数据,排序(类mysql orderby) 再建一个BasicDBObject即可,-1表示倒序
            DBCursor cursor = collection.find(filter_dbobject).limit(10).sort(new BasicDBObject("create_time",-1));
            
           //把结果集输出成list类型
            List<DBObject> list = cursor.toArray();
            System.out.println(list.size());//list的长度
            System.err.println(cursor.count());//计算结果的数量,类似于(mysql count()函数),不受limit的影响
            
            
            //遍历结果集
            while(cursor.hasNext()) {
                System.out.println(cursor.next());
            }
        }
    }

    补充:1.关于查询:如果想要查 "a=30或a=50"这样的条件怎么办?

           可以使用$in进行查询:      

        @Test
        public void testIn(){
            //a=30或者a=50
            DBObject queryCondition = new BasicDBObject();        
                           
            BasicDBList values = new BasicDBList();
            values.add(30);
            values.add(50);
            queryCondition.put("a", new BasicDBObject("$in", values));
            
            DBCursor dbCursor = coll.find(queryCondition);
            
        }    

    2.关于查询:如果想要查 "a>30或a<10"这样的条件怎么办?

    可以使用$or进行查询:      

    @Test
        public void testOrSingleField(){
            DBObject queryCondition = new BasicDBObject();        
            //查询a<10 OR a>30
                      BasicDBList values = new BasicDBList();
            values.add(new BasicDBObject("a", new BasicDBObject("$gt", 30)));
            values.add(new BasicDBObject("a", new BasicDBObject("$lt", 10)));
            queryCondition.put("$or", values);
            
            DBCursor dbCursor = coll.find(queryCondition);
            
        }

    那么,如果想要查 "a>30或b<10"这样的条件怎么办?

    只需要将上面代码改为如下,即可:

     values.add(new BasicDBObject("b", new BasicDBObject("$lt", 10)));

    3.如果是多值and查询只用new BasicDBobject(),然后再put即可,如下所示:

    BasicDBObject basic=new BasicDBObject();
    basic.put("name","amosli");
    basic.put("hobby","code");
    ....
    collection.find(basic).toArray();//将值转为list

    4.创建索引

            // 创建索引
            BasicDBObject obj = new BasicDBObject();
            obj.put("create_time", -1);
            collection.ensureIndex(obj);
            // 查询索引,遍历索引
            List<DBObject> list = collection.getIndexInfo();
            for (DBObject o : list) {
                System.out.println("	" + o);
            }
            

    5.查询非操作

    查询level为INFO,但status不为"已完成"的所结果数

            //not equal 非操作
            BasicDBObject basicDBObject = new BasicDBObject("level","INFO");
            System.out.println(collection.count(basicDBObject.append("status", new BasicDBObject("$ne",  "已完成"))));
        

    另,可参见:

    1.http://blog.csdn.net/llhhyy1989/article/details/12571111

    2.http://blog.csdn.net/mydeman/article/details/6652387

    3.http://docs.mongodb.org/manual/reference/operator/query/  查询命令,$ne,$in

  • 相关阅读:
    1028 人口普查 (20分)
    1027 打印沙漏 (20分)
    1026 程序运行时间 (15分)
    1025 反转链表 (25分)
    1024 科学计数法 (20分)
    1023 组个最小数 (20分)
    1022 D进制的A+B (20分)
    1021 个位数统计 (15分)
    1020 月饼 (25分)
    1019 数字黑洞 (20分)
  • 原文地址:https://www.cnblogs.com/amosli/p/3480676.html
Copyright © 2011-2022 走看看