mongoDB的介绍和相关操作(4)

mongdoDB的SELECT操作

 

public final DBObject find(DBObject o,   DBObject fields);

 第一个参数是查询参数类似与sql里的where后面的语句,第二个参数为需要查询的结果字段。

    public void getTestData () throws  Exception{   
        DBCollection coll=getConnection(host, port, dbName);   
         BasicDBObject doc = new BasicDBObject();   
        doc.put("title", 0);  
        BasicDBObject query = new BasicDBObject(); 
        query.put("_id", "1");
        query.put("title", "title");
         
        DBCursor cur = coll.find(query, doc);
        
        while(cur.hasNext()){   
            System.out.println(cur.next());   
           }  
    }  

 以上的代码为查询_id=1 and title='title'的结果,并将除了title字段外的其它所有字段显示。

doc.put("title", 0);  中的0的意思是不显示title字段,为1就是只显示title字段。在查询里0和1不能混用,要么都是0要么都是1.

 

 

 不等于判断

query.put("_id", new BasicDBObject("$gt", 0).append("$lte", 3));

 将红色部分的代码改成上面的代码

查询的是   _id > 0 and _id <=3的结果。

操作符有$gt 大于

           $gte 大于等于

            $lt 小于

           $lte小于等于

            $in包含  

 

 

排序

DBCursor cur = coll.find(query, doc).sort(new BasicDBObject("created_at", -1));

 将紫色部分的代码改成上面的代码

将查询结果根据created_at字段倒序排列。如果为1则为正序排列

 

 

分页

DBCursor cur = coll.find(query, doc).limit(10).skip(20);

 
将紫色部分的代码改成上面的代码

输出第20-30条,同  LIMIT 10 SKIP 20

 

 

模糊查询

使用正则表达式来进行模糊查询

Pattern john = Pattern.compile("^t",Pattern.CASE_INSENSITIVE);
query.put("title", john);

 

上面的代码使用正则表达式模糊查询 like 't%'

 

 

子元素分页

查询部分子结果

如查询问题id=1的前三个答案

    public void getTestData () throws  Exception{   
        DBCollection coll=getConnection(host, port, dbName);   
        List<Integer> range = new ArrayList<Integer>();
        range.add(0);
        range.add(3);
        BasicDBObject query = new BasicDBObject();
		BasicDBObject result = new BasicDBObject();
		query.put("id", 1);
		result.put("ANSWERS", new BasicDBObject().append("$slice",range));
		DBCursor cursor = coll.find(query, result);

      while(cursor.hasNext()){   
    	  System.out.println(cursor.next());   
     } 

 使用可以$slice读取子元素的部分结果,range用来控制读取的范围,第一个为正读、倒读,第二个为读取几条

db.question.find({}, {ANSWERS:{$slice: 5}}) // 前五条
db.question.find({}, {ANSWERS:{$slice: -5}}) // 最后五条
db.question.find({}, {ANSWERS:{$slice: [20, 10]}}) // skip 20, limit 10从20条开始读取10条
db.question.find({}, {ANSWERS:{$slice: [-20, 10]}}) // 20 from end, limit 10从最后20条开始读取10条

 

 

  in的查询

    

    public void getTestData () throws  Exception{   
        DBCollection coll=getConnection(host, port, dbName);   
        BasicDBObject query = new BasicDBObject();
        List<Integer> range = new ArrayList<Integer>();
        range.add(1);
        range.add(5);
        range.add(3);
		BasicDBObject result = new BasicDBObject();
		query.put("id", new BasicDBObject("$in",range));
		DBCursor cursor = coll.find(query, result);
      while(cursor.hasNext()){   
    	  System.out.println(cursor.next());   
     }  

 

查询id in (1,2,5)的结果集

 

 or 的查询

    public void getTestData () throws  Exception{   
	
        DBCollection coll=getConnection(host, port, dbName);   
        BasicDBObject query = new BasicDBObject();
		BasicDBObject result = new BasicDBObject();
		List<BasicDBObject> range = new ArrayList<BasicDBObject>();
		range.add(new BasicDBObject("id",1));
		range.add(new BasicDBObject("title","xtitle3"));
		query.put("$or", range);
		DBCursor cursor = coll.find(query, result);
		
		
      while(cursor.hasNext()){   
    	  System.out.println(cursor.next());   
     }  

 

查询id =1 or title=xtitle3 的结果集

 

子集合完全匹配

$all

        DBCollection coll=getConnection(host, port, dbName);   
        BasicDBObject query = new BasicDBObject();
		BasicDBObject result = new BasicDBObject();
		List<Integer> range = new ArrayList<Integer>();
		range.add(0);
		range.add(3);
		query.put("levels", new BasicDBObject("$all", range));
		DBCursor cursor = coll.find(query, result);

 

查询levels里既有0又有3的记录, levels: [ 0,1, 2, 3 ]符合,levels: [ 1, 2, 3 ]不符合

 

 

判断字段是否存在

 

      DBCollection coll=getConnection(host, port, dbName);   
      BasicDBObject query = new BasicDBObject();
		BasicDBObject result = new BasicDBObject();
		query.put("levels", new BasicDBObject().append("$exists", true));
		DBCursor cursor = coll.find(query, result);

 如果levels存在,符合条件

 

$ne  不等于

  格式

db.questions.find( { id: { $ne : 3 } } );

$nin   not in()

格式

db.questions.find({id:{$nin: [2,4,6]}});

 

 $size 判断子集的大小

 

        DBCollection coll=getConnection(host, port, dbName);   
        BasicDBObject query = new BasicDBObject();
  		BasicDBObject result = new BasicDBObject();
  		query.put("levels", new BasicDBObject().append("$size", 3));
  		DBCursor cursor = coll.find(query, result);

 

可以从这个找到levels的size=3的结果集,但是不能通过 $size 得到levels的大小,如果要得到大小,需要添加额外计数的字段,在更新levels时,更新计数

 

count() 统计总数

 

得到结果集的大小

coll.find(query, result).count();

 

你可能感兴趣的:(sql,mongodb,正则表达式)