zoukankan      html  css  js  c++  java
  • MongoDB查询

    使用了jongo框架:

    连接数据库:

    数据库配置类:

     

    package cn.com.rivercloud.common;
    
    import com.mongodb.MongoClientOptions.Builder;
    import com.mongodb.MongoCredential;
    import com.mongodb.ServerAddress;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Properties;
    
    import com.mongodb.DB;
    import com.mongodb.MongoClient;
    import com.mongodb.MongoClientOptions;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    public class DbManager {
        private static volatile DbManager instance;
    
        private static final Logger logger = LoggerFactory.getLogger(DbManager.class);
    
        private MongoClient mongoClient;
    
        private DbManager() {
    
        }
    
        public static DbManager getInstance() {
    
            if (null == instance) {
                synchronized (DbManager.class) {
                    if (null == instance) {
                        instance = new DbManager();
                        instance.init();
                    }
                }
            }
    
            return instance;
        }
    
        private void init() {
    
            // 连接池选项
         
            // 选项构建者
            com.mongodb.MongoClientOptions.Builder builder = new MongoClientOptions.Builder();
            
            // 每个地址最大请求数
            builder.connectionsPerHost(8);
            builder.threadsAllowedToBlockForConnectionMultiplier(4);
            
            // 设置连接超时时间
            builder.connectTimeout(10000);
            
            // 设置最大等待时间
            builder.maxWaitTime(120000);
            
            // 读取数据的超时时间
            builder.socketTimeout(1500);
    
            MongoClientOptions options = builder.build();
    
            List<ServerAddress> hosts = new ArrayList<ServerAddress>();
    
            String host = "127.0.0.1";
            logger.info("dbhost:"+host);
            int port = 27017;
            hosts.add(new ServerAddress(host, port));
            List<MongoCredential> credentials = new ArrayList<MongoCredential>();
            mongoClient = new MongoClient(hosts);
           
        }
    
        public MongoClient getMongoClient() {
            return mongoClient;
        }
        
        public DB getDataDb() {
            DB db = mongoClient.getDB("data");
            return db;
        }
    }

     

     

     

     

    private static Jongo jongo;
    static {
        DB db = DbManager.getInstance().getDataDb();
        jongo = new Jongo(db);
    }
    
    MongoCollection system_user = jongo.getCollection("system_user");

     

    add:

    User user = new User();
    WriteResult result = system_user.insert(user);

     

    delete:

    WriteResult result = system_user.remove();

     

    update:

    byUsername为新的User实体。 
    WriteResult with = system_user.update("{_id:#}", new ObjectId(id)).with(byUsername);

    更改username为lisi的数据(包含多个)
    system_user.update("{username:#}", "lisi")).multi().with(byUsername);


    query:

    普通查询:
    MongoCursor<User> as = system_uesr.find().as(User.class);
    MongoCursor<User> as = system_user.find().skip((pagination.getCurrent() - 1) * pagination.getPageSize()).limit(pagination.getPageSize()).as(User.class);
    MongoCursor<User> as = system_uesr.find(“{username:#,password:#}”,‘lisi’,‘123’).as(User.class);

    多条件符合查询:
    用到
    import org.springframework.data.mongodb.core.query.Criteria;
    Criteria criteria = new Criteria();
    String s = new Query(criteria).getQueryObject().toJson();

    MongoCursor<Map> as = system_user.find(s).skip((pagination.getCurrent() - 1) * pagination.getPageSize()).limit(pagination.getPageSize()).as(Map.class);




    ---------------------------------------------------------------------------------------------------------------------------------------------------------------
    多条件的另一种方法,不同的依赖,这个使用的是 org.mongodb 下的QueryBuilder;
    QueryBuilder queryBuilder = QueryBuilder.start();
    MongoCursor<Map> as = system_user.find(queryBuilder.get().toString()).skip((pagination.getCurrent() - 1) * pagination.getPageSize()).limit(pagination.getPageSize()).as(Map.class);
    
    

     Criteria的具体内容:

    Criteria criteria = new Criteria();
    //等于
    criteria.where("url").is(“a12345”)

    //模糊查询
    criteria.where("url").regex(“a”);

    //大于,小于等
    criteria.where("age").lte(20);

    //查询字段不存在的数据
    criteria.where("url").not();

    //查询字段不为空的数据
    criteria.where("url").ne("").ne(null);

    //查询或语句
    criteria.orOperator(Criteria.where("key1").is("0"),Criteria.where("key1").is(null));  
    //且语句
    criteria.where("url").is(“a12345”).and("username").is("lisi");

    //包含

      Object [] obj = new Object[]{0, 1, 2};   

      criteria.and("type").in(obj);  

     

    QueryBuilder 的具体内容:
    //查询匹配
    queryBuilder.and(QueryBuilder.start("companyName").is("number1").get());

    //模糊查询
    Pattern pattern = Pattern.compile("@_");
    queryBuilder.and(QueryBuilder.start("createId").regex(pattern).get());

    //模糊查询
    Pattern pattern = Pattern.compile("^.*"+name+".*$",Pattern.CASE_INSENSITIVE);
    queryBuilder.or(queryBuilder.start("username").regex(pattern).get(),queryBuilder.start("accountName").regex(pattern).get());
    //完全匹配
    Pattern pattern = Pattern.compile("^王$", Pattern.CASE_INSENSITIVE);
    //右匹配
    Pattern pattern = Pattern.compile("^.*王$", Pattern.CASE_INSENSITIVE);
    //左匹配
    Pattern pattern = Pattern.compile("^王.*$", Pattern.CASE_INSENSITIVE);
    //模糊匹配
    Pattern pattern = Pattern.compile("^.*王.*$", Pattern.CASE_INSENSITIVE);
    
    
  • 相关阅读:
    git --解决fatal: Not a git repository
    Linux --常见Linux目录名称
    Python--oop面向对象的学习1
    python --集合set的学习
    python --error整理(不定时更新)
    vue自定义指令获取焦点及过滤器修改时间
    解决GitHub push项目——Push failed: Unable to access 'https://********.git/': Failed to connect to 127.0.0.1 port 1080: Connection refused
    vue项目报错,解决Module build failed: Error: Cannot find module 'node-sass' 问题
    webpack打包过程及开发过程
    安装webpack的流程及注意事项
  • 原文地址:https://www.cnblogs.com/notchangeworld/p/12884143.html
Copyright © 2011-2022 走看看