您的位置:首页 > 数据库 > Mongodb

MongoDB之简单数据的统计与索引(三)

2019-04-09 09:11 309 查看

统计

[
{name:"张三",sex:true,class:"软开1班",age:28,salary:18000},
{name:"李四",sex:true,class:"软开2班",age:25,salary:15000},
{name:"王五",sex:false,class:"软开1班",age:35,salary:10000},
{name:"赵六",sex:true,class:"软开2班",age:20,salary:15000}
]

Aggregate

db.t_student.aggregate([
{$match:{}},
{$group:{
_id: "$class",
totalSalary: { $sum: "$salary" },
avgSalary: { $avg: "$salary" },
users:{$push:"$name"}
}
},
{$sort:{totalSalary:1}},
{$skip:0},
{$limit:2},
{$match:{avgSalary:{$gt:14000}}},
{$project:{users:false}}
])

MapReduce

db.t_student.mapReduce(function(){
emit(this.class,this)
},function(key,values){
var users=[];
var totalSalary=0.0;
var count=values.length;
values.forEach(function(item,i){
totalSalary+=item.salary;
users.push(item.name)
});
var results={};
results["totalSalary"]=totalSalary;
results["avgSalary"]=totalSalary/count;
results["users"]=users;
return results;
},{
query:{},
out:"t_student_count"
});

索引

单Filed索引

> db.集合.createIndex({field:1},{name:"索引名"})
> db.集合.getIndexes() #获取索引
> db.集合.dropIndex("索引名") #删除索引
> db.集合.reIndex() #重建索引

复合索引

db.集合.createIndex({field1:1,field2:-1},{name:"索引名"})

唯一索引

> db.集合.createIndex({field:1},{name:"索引名",unique:true})

稀疏索引

> db.集合.createIndex({name:1},{name:"name_index",unique:true,sparse:true})

不会对 null值 建立索引

局部索引

> db.集合.createIndex({name:1},{name:"name_index",unique:true,partialFilterExpression:{过滤条件}})
案例
> db.t_user.createIndex({name:1}, {name:"name_index",unique:true,partialFilterExpression:{age:{ $gt: 18} }})

TTL time to live

db.集合.createIndex( { "field": 1 }, { expireAfterSeconds: 3600 } )

GridFS

[root@centos ~]# mongofiles --host centos --port 27017 -d zpark put /root/jdk-8u171-linux-x64.rpm
[root@centos ~]# mongofiles --host centos --port 27017 -d zpark list
/root/jdk-8u171-linux-x64.rpm	175262413
[root@centos ~]# mongofiles --host centos --port 27017 -d zpark get /root/jdk-8u171-linux-x64.rpm
[root@centos ~]# mongofiles --host centos --port 27017 -d zpark get_id 'ObjectId("5bbf056ccdc8724bd9dbbf6f")'
[root@centos ~]# mongofiles --host centos --port 27017 -d zpark delete /root/jdk-8u171-linux-x64.rpm
[root@centos ~]# mongofiles --host centos --port 27017 -d zpark delete_id 'ObjectId("5bbf056ccdc8724bd9dbbf6f")'
[root@centos ~]# mongofiles --host centos --port 27017 -d zpark search install #搜索
[root@centos ~]# mongofiles --host centos --port 27017 -d zpark list /root/install #前缀搜索
  • A MongoDB driver.
MongoClient mongoClient = new MongoClient(new MongoClientURI("mongodb://192.168.128.128:27017"));

//上传
MongoDatabase database = mongoClient.getDatabase("zpark");
GridFSBucket gridFSBucket = GridFSBuckets.create(database,"myfs");
InputStream streamToUploadFrom = new FileInputStream(ne w File("C:\\Users\\Administrator\\Desktop\\考试题-网络编程.pdf"));
// Create some custom options
GridFSUploadOptions options = new GridFSUploadOptions()
.chunkSizeBytes(358400)
.metadata(new Document("user", "wangxiaowu"));

ObjectId fileId = gridFSBucket.uploadFromStream("考试题-网络编程.pdf", streamToUploadFrom, options);
//下载
FileOutputStream streamToDownloadTo = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\考试题-网络编程1.pdf");
gridFSBucket.downloadToStream(new ObjectId("5bbf1238d60f13103082088b"), streamToDownloadTo);
streamToDownloadTo.close();
//删除
gridFSBucket.delete(new ObjectId("5bbf1238d60f13103082088b"));
  • MongoDB Driver的基本使用。
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver</artifactId>
<version>3.6.4</version>
</dependency>

参考:http://mongodb.github.io/mongo-java-driver/3.6/driver/getting-started/quick-start/

上一篇:MongoDB之数据库与集合常规操作(二)
下一篇:MongoDB 架构(四)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: