您的位置:首页 > 编程语言 > Java开发

Mongo3.4.7与java1.8结合测试代码

2017-08-27 10:17 295 查看
1.下载mongo-java-driver-3.5.0.jar驱动并引入测试项目中。

2.代码如下:

package com.zzw.mongodb;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.LinkedList;
import java.util.List;

import org.bson.Document;

import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.MapReduceCommand;
import com.mongodb.MapReduceOutput;
import com.mongodb.Mongo;
import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.AggregateIterable;
import com.mongodb.client.DistinctIterable;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MapReduceIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;
import com.mongodb.client.model.Sorts;

public class Test {

public static void main(String[] args) {
// TODO Auto-generated method stub

//插入
//insert();

//查询
query();

//更新
//update();

//删除
//delete();

}

//有密码连接
public static MongoDatabase connect1(){
//连接到MongoDB服务 如果是远程连接可以替换“localhost”为服务器所在IP地址
//ServerAddress()两个参数分别为 服务器地址 和 端口
ServerAddress serverAddress = new ServerAddress("localhost",27017);
List<ServerAddress> addrs = new ArrayList<ServerAddress>();
addrs.add(serverAddress);

//参数: 用户名 数据库名称 密码
MongoCredential credential = MongoCredential.createScramSha1Credential("username", "databaseName", "password".toCharArray());
List<MongoCredential> credentials = new ArrayList<MongoCredential>();
credentials.add(credential);

//通过连接认证获取MongoDB连接
MongoClient mongoClient = new MongoClient(addrs,credentials);
//参数:Collections名称
MongoDatabase db = mongoClient.getDatabase("databaseName");
return db;
}

//无密码连接
public static MongoDatabase connect(){
//连接到mongo数据库
MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
//获取某一数据库
MongoDatabase db = mongoClient.getDatabase("test");
return db;
}
//插入
public static void insert(){
//连接到数据库
MongoDatabase db = connect();
//获取某一集合
MongoCollection<Document> collection = db.getCollection("user");
//时间格式
SimpleDateFormat s=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Calendar cal=Calendar.getInstance();
//插入单个文档
Document doc = new Document();
doc.put("name", "zhangsan");
doc.put("age", 5);
doc.put("sex", "男");
doc.put("time", s.format(cal.getTime()));
collection.insertOne(doc);
//插入多个文档
List<Document> docs = new LinkedList<Document>();
for(int i=0; i<25; i++){
Document doc1 = new Document();
doc1.put("name", "zhangsan"+(i+1));
doc1.put("age", 6+i);
if(i % 2 == 0){
doc1.put("sex", "男");
}
else{
doc1.put("sex", "女");
}
doc1.put("time", s.format(cal.getTime()));
docs.add(doc1);
}
collection.insertMany(docs);
System.out.println("插入成功");
}

//更新
public static void update(){
//连接到数据库
MongoDatabase db = connect();
//获取某一集合
MongoCollection<Document> collection = db.getCollection("user");
//更新全部。更新单个使用collection.updateOne(arg0, arg1)方法
collection.updateMany(Filters.gt("age",4),new Document("$set",new Document("time","2017/08/24 19:51:48")));
//检索查看结果
FindIterable<Document> findIterable = collection.find();
MongoCursor<Document> mongoCursor = findIterable.iterator();
while(mongoCursor.hasNext()){
System.out.println(mongoCursor.next());
}
System.out.println("更新成功");
}

//删除
public static void delete(){
//连接到数据库
MongoDatabase db = connect();
//获取某一集合
MongoCollection<Document> collection = db.getCollection("user");
//删除符合条件的第一个文档
collection.deleteOne(Filters.gt("age", 4));
//删除所有符合条件的文档
collection.deleteMany (Filters.gt("age", 4));
System.out.println("删除成功");
}

//查询
public static void query(){
//连接到mongo数据库
MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
//获取某一数据库
MongoDatabase db = mongoClient.getDatabase("test");
//获取某一集合
MongoCollection<Document> collection = db.getCollection("user");
//输出集合内所有元素
FindIterable<Document> documents = collection.find();
for (Document document : documents) {
System.out.println(document);
}
//count()函数可以加 条件,参数形式可以是document或Filters
long cnt=collection.count();
System.out.println("共有"+cnt+"条记录");

//查找所有name = zhangsan的document
//Document query1 = new Document("name", "zhangsan");
//FindIterable<Document> documents1 = collection.find(query1);
//使用filter查询 :eq ne lt gt lte gte and or in
FindIterable<Document> documents1 = collection.find(Filters.eq("name", "zhangsan"));
for (Document d : documents1) {
System.out.println(d.toJson());
}

//and 查询
//Document query2 = new Document("age", new Document("$lt", 25)).append("name", "zhangsan");
//FindIterable<Document> documents2 = collection.find(query2);
FindIterable<Document> documents2 = collection.find(Filters.and(Filters.eq("name", "zhangsan"),Filters.lt("age", 25)));
for (Document d : documents2) {
System.out.println(d.toJson());
}

//or 查询
//Document query3 = new Document("$or", Arrays.asList(new Document("name", "zhangsan"), new Document("name", "zhangsan1")));
//FindIterable<Document> documents3 = collection.find(query3);
FindIterable<Document> documents3 = collection.find(Filters.or(Filters.eq("name", "zhangsan"),Filters.lt("name", "zhangsan1")));
for (Document d : documents3) {
System.out.println(d.toJson());
}

//between and 查询
Document query4 = new Document("age", new Document("$lt", 23).append("$gt", 20));
FindIterable<Document> documents4 = collection.find(query4);
for (Document d : documents4) {
System.out.println(d.toJson());
}

FindIterable<Document> documents5 = collection.find(Filters.in("age", Arrays.asList(16,18,20)));
for (Document d : documents5) {
System.out.println(d.toJson());
}

//按name升序,name相同的按age降序
FindIterable<Document> documents6 = collection.find().sort(Sorts.orderBy(Sorts.ascending("name"), Sorts.descending("age")));
for (Document d : documents6) {
System.out.println(d.toJson());
}

//skip()跳过,limit()限制,常用于分页显示。跳过前5条(0-4),返回(5-9)共5条。
FindIterable<Document> documents7 = collection.find().sort(Sorts.descending("age")).skip(5).limit(5);
for (Document d : documents7) {
System.out.println(d.toJson());
}

System.out.println("ssss");
//distinct:去重
DistinctIterable<String> name = collection.distinct("name", String.class);
MongoCursor<Integer> c = collection.distinct("age",Integer.class).iterator();
for (String s : name) {
System.out.println(s);
}

//沒有条件
AggregateIterable<Document> aggregate = collection.aggregate(Arrays.asList(
new Document("$project", new Document("name", 1).append("_id", 0).append("age", 1).append("sex", 1).append("time", 1))
,new Document("$group", new Document("_id", "$time").append("avg", new Document("$avg", "$age")).append("first", new Document("$first", "$name")))
));

for (Document document : aggregate) {
System.out.println(document.toJson());
}

//加入条件
System.out.println("加入条件后聚合:");
AggregateIterable<Document> aggregate1 = collection.aggregate(Arrays.asList(
new Document("$project", new Document("name", 1).append("_id", 0).append("age", 1).append("sex", 1).append("time", 1))
,new Document("$match", new Document("age",new Document("$lt", 20).append("$gt", 7)))
,new Document("$group", new Document("_id", "$time").append("avg", new Document("$avg", "$age")).append("first", new Document("$first", "$name")))
));
for (Document document : aggregate1) {
System.out.println(document.toJson());
}

//map reduce
String map = "function() { "+
"var category; " +
"if ( this.age >= 18 ) "+
"category = '青年'; " +
"else " +
"category = '少年'; "+
"emit(category, {name: this.name});}";

String reduce = "function(key, values) { " +
"var sum = 0; " +
"values.forEach(function(doc) { " +
"sum += 1; "+
"}); " +
"return {count: sum};} ";

MapReduceIterable<Document> mr=collection.mapReduce(map, reduce);
for (Document o : mr) {
System.out.println(o.toJson());
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mongodb java