mongodb清洗数据
1,数据库连接超时:DBPool的连接时的配置:
自己进行设置:
MongoClientOptions mco = new MongoClientOptions.Builder()
.autoConnectRetry(autoConnectRetry).writeConcern(WriteConcern.SAFE).connectionsPerHost(
poolSize).threadsAllowedToBlockForConnectionMultiplier(blockSize).connectTimeout(
connectTimeout).socketTimeout(socketTimeout).maxWaitTime(maxWaitTime).build();
mongoClient = new MongoClient(listServerAddresses.get(i), mco); 2,
六月 03, 2015 10:05:34 上午 com.mongodb.DBPortPool gotError
警告: emptying DBPortPool to /172.18.2.162:27017 b/c of error
com.mongodb.MongoException: ids don't match3,查询数据
DBObject timebegine = new BasicDBObject();
DBObject timebeginegte = new BasicDBObject();
timebeginegte.put("$gte", this.getTimeBegine());
timebegine.put("createTime", timebeginegte);
DBCursor result = collection.find(timebegine).sort(new BasicDBObject("createTime", 1)); 正则表达式,mongo里面没有类似sql的like特性,不过可以用正则表达式代替
使用正则表达式查询有两种情况,在支持正则表达式字面值(标量)的语言里可以直接使用正则表达式字面值,比如RUBY NODEJS等。
db.USER.find({NAME:/^run/i});//以javascript为例,这个查询出所有用户名以run开头的用户,且不分大小写
像JAVA这样不支持正则表达式标量的语言怎么办呢?就有些麻烦了,需要借助MONGO api完成从字符串到正则表达式的转化。
db.USER.find(NAME:{$regex:'^run',$options:'i'});//这行命令完成跟上一行一样的工作。
其中,$options是正则表达式的选项,它一共有三个字母的任意组合可选,这三个字母分别是g i m,这三个字母可以任意组合表达不同的意义。
g:表示针对整个字符串做匹配,如果不加正则表达式在匹配到第一个符合的子串时就返回了。(global)
i:忽略大小写(insenssitive)
m:一个字符串内如果存在换行符,将作为多行模式匹配(multiple)
除了i以外其它两个选项在查询的时候恐怕用不到。
5 Exception in thread "main" com.mongodb.MongoException$CursorNotFound: cursor 2918353977892988810 not found on server /172.18.22.11:27017
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
collection.resetOptions();
collection.addOption(Bytes.QUERYOPTION_NOTIMEOUT);
DBCursor result = collection.find(timebegine).sort(new BasicDBObject("createTime", 1));
int delnum = result.count();
logger.info("需要处理的消息数为:{}", delnum);
while (result.hasNext()) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~