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

统计

[
    {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 架构(四)

猜你喜欢

转载自blog.csdn.net/qq_42806727/article/details/89093382
今日推荐