java使用mongDB的基础查询

本文介绍了在Java中使用MongoDB进行基础查询的方法,包括使用$or进行多个条件组合查询,多值AND查询,非操作查询以及如何有效利用skip避免大量数据跳过导致的性能问题。
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());
        }
    }
}

关于查询:如果想要查 “a=30或a=50”这样的条件怎么办?

   可以使用$in进行查询:   
      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进行查询:

 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查询非操作

查询level为INFO,但status不为"已完成"的所结果数
  //not equal 非操作
        BasicDBObject basicDBObject = new BasicDBObject("level","INFO");
        System.out.println(collection.count(basicDBObject.append("status", new BasicDBObject("$ne",  "已完成"))));

5.使用skip跳过少量的数据是很好的选择,但是如果跳过大量的数据的时候,skip方法就会执行的很慢。所以我们要尽量的避免使用skip跳过大量的数据

public List<User> pageList(int page,int pageSize){
        DB myMongo = MongoManager.getDB("myMongo");
        DBCollection userCollection = myMongo.getCollection("user");

        DBCursor limit = userCollection.find().skip((page - 1) * 10).sort(new BasicDBObject()).limit(pageSize);     List<User> userList = new ArrayList<User>();
        while (limit.hasNext()) {
            User user = new User();
            user.parse(limit.next());
            userList.add(user);
        }
        return userList;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值