MongoDB 实操 —— 基本操作(一)

    * 根据时间排序
          db.getCollection('WP_GATHER').find({}).sort({ syscreateDate : -1 });
    * 导入导出数据
           ./mongoexport -h localhost:27017 -uwpms -p123456 -d wpms -c WP_GATHER -o /home/deepin/wpms.json  # 必须输入数据库的账号和密码
         ./mongoimport -h localhost:27017 -d wpms -c WP_GATHER /data/wpms.json

# 用MongoDB查昨天某个collection产生的记录数量,在mysql里面可以用between..and..或者 >、>=、<、<=来查询指定的时间范围数据,但是MongoDB有自己的语法。mongodb里比较,用 "$gt" 、"$gte"、 "$lt"、 "$lte"(分别对应">"、 ">=" 、"<" 、"<="),组合起来可以进行范围的查找。
    * 查看条数
            db.getCollection('WP_GATHER').find({}).count()
    * 模糊查询
            db.getCollection('WP_GATHER').find({"warcpath":{$regex:'/20190429/'}})
    * 根据时间删除数据
            db.getCollection(´xxxxx´).remove({´time´:{$gte:´08:00:00´, $lt: ´09:15:00´}})
    *  分页查询
            .skip(0).limit(100)  * skip 跳过的数据    *limit 获取的数据
    * 修改文档
            # 修改mongo中的数据
                  db.collection.update({"name1":"val1"},{"$set": {"name2":"val2"}},false,true)
            #如果没有后面两个参数,则只更新一行数据。
                 db.collection.update(
                              <query>,
                             <update>,
                            {
                                 upsert: <boolean>,
                                 multi: <boolean>,
                                 writeConcern: <document>
                             }
                  )

          #参数说明:
                 query : update的查询条件,类似sql update查询内where后面的。
                 update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
                 upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
                 multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
                writeConcern :可选,抛出异常的级别。


    * 创建索引
           db.getCollection('').createIndex(keys,options);

        # options 配置信息
                background    Boolean    建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 "background" 可选参数。 "background" 默认值为false。
                unique    Boolean    建立的索引是否唯一。指定为true创建唯一索引。默认值为false.
               name    string    索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称。
              dropDups    Boolean    3.0+版本已废弃。在建立唯一索引时是否删除重复记录,指定 true 创建唯一索引。默认值为 false.
               sparse    Boolean    对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。默认值为 false.
              expireAfterSeconds    integer    指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。
              v    index version    索引的版本号。默认的索引版本取决于mongod创建索引时运行的版本。
              weights    document    索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重。
              default_language    string    对于文本索引,该参数决定了停用词及词干和词器的规则的列表。 默认为英语
               language_override    string    对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖默认的language,默认值为 language.
     * 查看索引
          db.col.getIndexes()
    # explain() 查看执行的数据
         db.getCollection('WP_GATHER').find({"gatherType":{$in:['0','2']},"gatherDate":{$regex:"^2019-09-16.*$"}}).explain()

    # 删除索引
         db.getCollection('WP_GATHER').dropIndex('gather');
         db.geCollection('WP_GATHER').find({"sysGuid":"d67ce6dc-5b17-4fe3-8e9f-2a5db559d6cb"})

    # 查看索引文件
         db.getCollection('WP_GATHER').getIndexes();
         db.getCollection('WP_GATHER').getIndexSpecs()
    # 查看索引大小
         db.getCollection('WP_GATHER').totalIndexSize()
         db.currentOp()
         db.killOp() 


===========下面省略,实操待整理==============
     * 查询代码
          BasicDBObject query = new BasicDBObject();
          query.put("siteId", siteId);
          query.put("title", new BasicDBObject("$ne", ""));
          query.put("ofdPath", "");
        //尝试次数为空或者小于等于最大次数
        BasicDBList values = new BasicDBList();
        values.add(new BasicDBObject("palceholder1", ""));
        values.add(new BasicDBObject("palceholder1", new BasicDBObject("$lte", SysParamUtil.getSysParam("edrms.system.ofd.convert.trycount","3"))));
        query.put("$or", values);
      
        
        BasicDBObject fieldsObject = new BasicDBObject();
        fieldsObject.put("sysGuid", true);
        fieldsObject.put("url", true);
        fieldsObject.put("ofdPath", true);
        fieldsObject.put("title", true);
        fieldsObject.put("palceholder1", true);//转换次数

        DBCursor dbCursor = template.getCollection(GATHER_TABLE_NAME).find(query, fieldsObject).sort(new BasicDBObject("gatherDate",1))
                .limit(Integer.parseInt(SysParamUtil.getSysParam("edrms.system.ofd.convert.limit","10")));
        int sum = 0;
        try {
            List<Future<String>> resultList = new ArrayList<>();
            while (dbCursor.hasNext()) {
                DBObject object = dbCursor.next();
                String url = String.valueOf(object.get("url"));
                String sysGuid = String.valueOf(object.get("sysGuid"));
                String title = String.valueOf(object.get("title"));
                String palceholder1 = String.valueOf(object.get("palceholder1"));
        db.getCollection('WP_GATHER').find({"siteGuid":"60694835-e6cf-47f9-bee6-e34a3c46823b","ofdPath":"","title":{$ne:""}
        ,$or:[{"palceholder1":""}]}).sort({"gatherDate":1})
        db.getCollection("WP_GATHER").update({"batch":"20190803"},{$set:{ ofdPath:"",palceholder1:""}},false,true)
    
    db.getCollection("WP_GATHER").find({"sysGuid":"e19ff058-f9b2-4064-90cd-5fea2cca6f39"})
        #对mongo实例来说,每个host允许链接的最大链接数,这些链接空闲时会放入池中,如果链接被耗尽,任何请求链接的操作会被阻塞等待链接可用,推荐配置10
        connectionsPerHost=10
        #当链接空闲时,空闲线程池中最大链接数
        minPoolsSize=5
        #此参数跟connectionsPerHost的乘机为一个线程变为可用的最大阻塞数,超过此乘机数之后的所有线程将及时获取一个异常.eg.connectionsPerHost=10 and threadsAllowedToBlockForConnectionMultiplier=5,最多50个线程等级一个链接,推荐配置为5
        threadsAllowedToBlockForConnectionMultiplier=5
        #一个线程等待链接可用的最大等待毫秒数,0表示不等待,负数表示等待时间不确定,推荐配置120000
        maxWaitTime=120000
        #链接超时的毫秒数,0表示不超时,此参数只用在新建一个新链接时,推荐配置10,000.
        connectTimeout=10000
        #此参数表示socket I/O读写超时时间,推荐为不超时,即 0    Socket.setSoTimeout(int)
        socketTimeout=0
        #该标志用于控制socket保持活动的功能,通过防火墙保持连接活着
        socketKeepAlive=false
        #true:假如链接不能建立时,驱动将重试相同的server,有最大的重试次数,默认为15次,这样可以避免一些server因为一些阻塞操作零时down而驱动抛出异常,这个对平滑过度到一个新的master,也是很有用的,注意:当集群为复制集时,驱动将在这段时间里,尝试链接到旧的master上,而不会马上链接到新master上
        #false 当在进行socket读写时,不会阻止异常抛出,驱动已经有自动重建破坏链接和重试读操作. 推荐配置false
        autoConnectRetry=false
        #重新打开链接到相同server的最大毫秒数,推荐配置为0,如果 autoConnectRetry=true,表示时间为15s
        #com.jd.mongodbclient2.mongo.JDClientMongo.maxAutoConnectRetryTime=false
        #表示当没有手动关闭游标时,是否有一个自动释放游标对象的方法,如果你总是很小心的关闭游标,则可以将其设为false 推荐配置true

        #com.jd.mongodbclient2.mongo.JDClientMongo.cursorFinalizerEnabled=true

        #安全模式

        com.jd.mongodbclient2.driver.MongoDBDriver.safe=true
        #为true表示读写分离

发布了19 篇原创文章 · 获赞 4 · 访问量 1240

猜你喜欢

转载自blog.csdn.net/qq_41133533/article/details/102618922
今日推荐