1.同一个mongo不同数据库的表的拷贝
db.yc_order.find().forEach(function(d){ db.getSiblingDB('insurance-alltrust')['yc_order'].insert(d); });
2.不同mongo的库拷贝同一个mongo也可以直接拷贝库
db.copyDatabase("insurance-alltrust","insurance-anxin","localhost");
3.字段是否存在的java用法
MongoBaseDao.findList("travel_poi", new Document("nation",new Document("$exists",false)));
4.数组查询:
条件可以直接为 ‘citys’:'北京市' 或者是 ‘citys’:['北京市','上海市']
5.数据导出csv格式:
mongoexport --type=csv -d insurance -c travle_poi -q "{'realtime' : '20161109'}" -o acc.dat -f areaId,cityId,proviceId,timeType,realtime,forcasttime,data.rain,data.t_max
6.数据导入csv:
mongoimport -d insurance-alltrust -c hlg_city_b --type csv -f "month,value,value2,city,timeType" hlg_city_b
7.整体更新:
.update({name:'武汉'},{$set:{name:'武汉欢乐谷'}},{multi:true});
8.条件查询:(大小与):
new Document("washcar.begin", new Document("$lte", begin).append("$lt", today)) 大小与
9.空间索引:
1).球面索引
db.station.ensureIndex({loc:"2dsphere"},{unique:true, dropDups:true})
db.station.find( { loc : { $near : { $geometry : { type : "Point" , coordinates : [20 , 108] } , $maxDistance : 1000000 } } } )
2).平面索引
db.station.ensureIndex({loc:"2d"},{unique:true, dropDups:true})
db.station.find( { loc : { $near : [20 , 108] } } )
10 排序:
sort 方法 中 字段1代表正序 -1是逆序
new Document("washcar.begin", new Document("$lte", begin).append("$lt", today)) 大小与
11 $in查询的数组表示方法
Java中用$in查询的时候 数组用 Arrays.asList(10,20,30)来定义....
12.mongo的账号密码java
ServerAddress sa = new ServerAddress(ip, port);
List<MongoCredential> mongoCredentialList = new ArrayList<MongoCredential>();
mongoCredentialList.add(MongoCredential.createCredential( username,db, password.toCharArray()));
MongoClient client = new MongoClient(sa, mongoCredentialList);
记得eclipse用jre不要用jdk
13.mongo java 代码更新的时候碰到Can't find a codec for class java.math.BigDecima
解决办法:更新和插入是的时候吧数据转为DBobject
DBObject jsOB = (DBObject) com.mongodb.util.JSON.parse(data.toJSONString());
14.mongo占用内存过多问题:
mongo会随着时间推移,缓存变多,占用系统更多内存,直到50%
可以添加启动参数,限制内存代销wiredTigerCacheSizeGB=2 限制Mongo最大内存为2Gb,或者限制其占用百分比
15.删除重复数据
db.getCollection('city.area').aggregate([
{
$group:{_id:{name:'$name',cityCode:'$cityCode'},count:{$sum:1},dups:{$addToSet:'$_id'}}
},
{
$match:{count:{$gt:1}}
}
]).forEach(function(it){
it.dups.shift();
db.getCollection('city.area').remove({_id: {$in: it.dups}});
});
- 使用aggregate聚合查询重复数据
- $group中是查询条件,根据content、endTime、startTime字段来聚合相同的数据;
- $count用来统计重复出现的次数, $match来过滤没有重复的数据;
- $addToSet将聚合的数据id放入到dups数组中方便后面使用;
- 查询结果使用forEach进行迭代id来删除数据
- shift()作用是剔除队列中第一条id,避免删掉所有的数据;
PS:注意函数的大小写,mongoDB是严格区分大小写的!!!