MongoDB 3.x java基本操作-CRUD

来源:互联网 发布:云像数字 知乎 编辑:程序博客网 时间:2024/05/16 12:14

MongoDB 3.x java基本操作

mongodbb版本:3.4
maven依赖:

    <dependency>        <groupId>org.mongodb</groupId>            <artifactId>mongo-java-driver</artifactId>            <version>3.4.2</version>        </dependency>

最近刚学习MongoDB ,记录下mongoDB的基本操作
项目地址:https://git.coding.net/poppy2016/mongodb-java.git

数据格式:
这里写图片描述

Connection工具类:

import com.mongodb.MongoClient;import com.mongodb.MongoClientURI;import com.mongodb.client.MongoDatabase;public class Connection {    private static final String URI = "mongodb://userWords:test@localhost:27017/words";    private static  MongoDatabase DB_CONNECTION = null;    private static  MongoClient MONGO_CLIENT= null;    public static MongoDatabase getDB(){        if(DB_CONNECTION != null && MONGO_CLIENT != null){            return DB_CONNECTION;        }//         启用了认证,如果不启用,可以使用这种方式创建连接.//        MONGO_CLIENT = new MongoClient("127.0.0.1",27017);        MONGO_CLIENT = new MongoClient(new MongoClientURI(URI));        DB_CONNECTION = MONGO_CLIENT.getDatabase("words");        return DB_CONNECTION;    }    public static void closeDBConntion(){        if(MONGO_CLIENT != null){            System.out.println("连接已关闭.");            MONGO_CLIENT.close();        }    }    public static void main(String[] args) {    }}

CRUD:

插入:

package org.programming.mongodb.crud;import java.util.Arrays;import java.util.List;import org.bson.Document;import org.programming.mongodb.Connection;import org.programming.mongodb.Constant;import com.mongodb.client.FindIterable;import com.mongodb.client.MongoCollection;import com.mongodb.client.MongoCursor;import com.mongodb.client.MongoDatabase;public class MongoDBInsert {    private MongoCollection<Document> collection;    public MongoDBInsert() {        MongoDatabase db = Connection.getDB();        collection = db.getCollection(Constant.COLLECTION_NAME);    }    public static void main(String[] args) {        MongoDBInsert mongo = new MongoDBInsert();//        mongo.addSelfie();        mongo.addGoogleAndTweet();        Connection.closeDBConntion();    }    /**    * @Title: addSelfie     * @Description: TODO 插入一个文档       * @date 2017年6月11日 下午3:07:03        * @return void        * @throws     */    public void addSelfie(){        Document selfie = new Document("word","selefie");        selfie.append("first", "s").append("lase",  "e");        selfie.append("size", 6).append("category", "New");//        selfie.append("leters", new String [] {"s","e", "l", "f", "i"});        selfie.append("leters", Arrays.asList("s","e", "l", "f", "i"));        Document stats = new Document("consontans", 3);        stats.append("vowels",3);        selfie.append("stats", stats);        Document cons = new Document("type","consontans");//        cons.append("chars", new String[] {"s", "l", "f"});        cons.append("chars", Arrays.asList("s", "l", "f"));        Document vowels = new Document("type","vowels");//        vowels.append("chars", new String[] {"e", "i"});        vowels.append("chars", Arrays.asList("e", "i"));//        Document [] charsets = new Document [] {cons,vowels};        List<Document> charsets = Arrays.asList(cons, vowels);        selfie.append("charsets", charsets);        try {            collection.insertOne(selfie);            System.out.println("插入成功");        } catch (Exception e) {            System.out.println("插入异常");            e.printStackTrace();        }    }    /**    * @Title: addGoogleAndTweet     * @Description: TODO 插入多个文档       * @date 2017年6月11日 下午3:06:45        * @return void        * @throws     */    public void addGoogleAndTweet(){        Document google = new Document("word","google");        google.append("first", "g").append("last", "e").append("size", "6").append("category", "New").append("letters",Arrays.asList("g","o","l","e"));        Document stat = new Document("consonats",3).append("vowels", 3);        google.append("stats",stat);        Document cons = new Document("type", "consonants").append("chars", Arrays.asList("g","l"));        Document vowels = new Document("type", "vowels").append("chars", Arrays.asList("o","e"));        List<Document> charsets = Arrays.asList(cons, vowels);        google.append("charsets", charsets);        Document tweet = new Document("word","tweet");        tweet.append("first", "t").append("last", "t").append("size", "5").append("category", "New").append("letters",Arrays.asList("t","w","e"));        Document tstat = new Document("consonats",3).append("vowels", 2);        tweet.append("stats",tstat);        Document tcons = new Document("type", "consonants").append("chars", Arrays.asList("t","w"));        Document tvowels = new Document("type", "vowel").append("chars", Arrays.asList("e"));        List<Document> tcharsets = Arrays.asList(tcons, tvowels);        tweet.append("charsets", tcharsets);        collection.insertMany(Arrays.asList(google,tweet));        FindIterable<Document> queryResult= collection.find(new Document("category","New"));        MongoCursor< Document> cursor = queryResult.iterator();        while(cursor.hasNext()){            System.out.println(cursor.next());        }    }}
package org.programming.mongodb.crud;import static com.mongodb.client.model.Accumulators.*;import static com.mongodb.client.model.Filters.*;import static com.mongodb.client.model.Aggregates.*;import java.util.Arrays;import org.bson.Document;import org.bson.conversions.Bson;import org.programming.mongodb.Connection;import org.programming.mongodb.Constant;import com.mongodb.client.AggregateIterable;import com.mongodb.client.MongoCollection;import com.mongodb.client.MongoCursor;import com.mongodb.client.MongoDatabase;import com.mongodb.client.model.Filters;public class MongoDBSelect {    private MongoCollection<Document> collection;    public static void main(String[] args) {        MongoDBSelect mongo = new MongoDBSelect();        System.out.println("=============查询一个=============");        mongo.getOne();        System.out.println("===========限制数量===========");        mongo.findLimit(1);        mongo.findLimit(4);        mongo.findLimit(6);        System.out.println("===========限制返回属性===========");        mongo.includeFields(new String[] {});        mongo.includeFields(new String[] { "word" });        mongo.includeFields(new String[] { "word", "stats", "letters" });        mongo.excludeFields(new String[] { "charsets", "stats" });        System.out.println("===========分页查询===========");        mongo.findByPage(1, 10);        mongo.findByPage(2, 20);        mongo.findByPage(3, 5);        mongo.findByPage(4, 30);        System.out.println("==========聚合查询============");        mongo.largeSmallWithVowels();        System.out.println("---------------------------");        mongo.Top10AvgWordFirst();        Connection.closeDBConntion();    }    public MongoDBSelect() {        MongoDatabase db = Connection.getDB();        collection = db.getCollection(Constant.COLLECTION_NAME);    }    public void getOne() {        Bson query = Filters.eq("first","k");        Document doc = collection.find(query).first();        System.out.println(doc.toJson());    }    /**     * @Title: findLimit      * @Description: TODO 限制返回的文档数量     * @date 2017年6月11日 上午9:36:23      * @return void      * @throws     */    public void findLimit(int limit) {        Document query = new Document("first", "s");        MongoCursor<Document> cursor = collection.find(query).limit(limit).iterator();        StringBuilder sb = new StringBuilder();        while (cursor.hasNext()) {            Document doc = cursor.next();            sb.append(" " + doc.get("word").toString());        }        String words = sb.toString();        if (sb.length() > 80) {            words = sb.substring(0, 80);        }        System.out.println(words);    }    /**     * @Title: inlcudeFields      * @Description: TODO 限定返回字段     *  @date 2017年6月11日 上午10:06:28      *  @param fields 包含的字段.      *  @return void      *  @throws     */    public void includeFields(String[] fields) {        Document query = new Document("first", "h");        Document fieldDoc = new Document();        for (String field : fields) {            fieldDoc.append(field, 1);        }        MongoCursor<Document> cursor = collection.find(query).projection(fieldDoc).limit(2).iterator();        System.out.println("包含 " + Arrays.toString(fields) + " 字段");        while (cursor.hasNext()) {            System.out.println(cursor.next().toJson());        }    }    /**     * @Title: excludeFields     * @Description: TODO 限定返回字段      * @date 2017年6月11日 上午10:15:40     * @param fields 不包含的字段.      * @return void      * @throws     */    public void excludeFields(String[] fields) {        Document query = new Document("first", "h");        Document fieldDoc = new Document();        for (String field : fields) {            fieldDoc.append(field, 0);        }        MongoCursor<Document> cursor = collection.find(query).projection(fieldDoc).limit(2).iterator();        System.out.println("不包含 " + Arrays.toString(fields) + " 字段");        while (cursor.hasNext()) {            System.out.println(cursor.next().toJson());        }    }    /**     * @Title: findByPage      * @Description: TODO 分页查询      * @date 2017年6月11日 上午10:19:59     * @param page 单前页码     * @param pageSize 每页最大文档数     * @return void     * @throws     */    public void findByPage(int page, int pageSize) {        Document query = new Document("first", "h");        Document fieldDoc = new Document();        fieldDoc.append("word", 1);        fieldDoc.append("letters", 1);        MongoCursor<Document> cursor = collection.find(query).projection(fieldDoc).limit(pageSize)                .skip((page - 1) * page).iterator();        System.out.println(String.format("当前页码:%d,当前页最大文档数:%d", page, pageSize));        while (cursor.hasNext()) {            System.out.println(cursor.next().toJson());        }    }    /**    * @Title: firstIsAAndLastIsVowel     * @Description: TODO 分组查询 .mongodb 3.x中没有查到group 方法.     * @date 2017年6月11日 上午11:45:52        * @return void        * @throws     */    public void firstIsAAndLastIsVowel() {    }    /**    * @Title: largeSmallvowels     * @Description: TODO 聚合.每种元音字母开头的单词中最大和最短长度.    * @date 2017年6月11日 上午11:47:38        * @return void        * @throws     */    public void largeSmallWithVowels() {        Bson match = match(in("first", Arrays.asList("a", "e", "i", "o", "u")));        Bson group = group("$first", max("largest", "$size"), min("smallest", "$size"), sum("total", "$size"));        Bson sort = sort(new Document("_id", 1));        AggregateIterable<Document> result = collection.aggregate(Arrays.asList(match, group, sort));        MongoCursor<Document> cursor = result.iterator();        while (cursor.hasNext()) {            System.out.println(cursor.next().toJson());        }    }    /**    * @Title: Top10AvgWordFirst     * @Description: TODO 聚合.每种字母开头的单词中平均长度最长的10个.    * @date 2017年6月11日 上午11:54:36        * @return void        * @throws     */    public void Top10AvgWordFirst() {        Bson group = group("$first", avg("avegrage", "$size"));        Bson sort = sort(new Document("avegrage", -1));        Bson limit = limit(10);        AggregateIterable<Document> result = collection.aggregate(Arrays.asList(group, sort, limit));        MongoCursor<Document> cursor = result.iterator();        while (cursor.hasNext()) {            System.out.println(cursor.next().toJson());        }    }}

更新

package org.programming.mongodb.crud;import org.bson.Document;import org.bson.conversions.Bson;import org.programming.mongodb.Connection;import org.programming.mongodb.Constant;import com.mongodb.client.MongoCollection;import com.mongodb.client.MongoCursor;import com.mongodb.client.MongoDatabase;import com.mongodb.client.model.Filters;public class MongoDBUpdate {    public static void main(String[] args) {        MongoDBUpdate mongo = new MongoDBUpdate();        System.out.println("========更新之前=============");        mongo.showWord();        mongo.updateDoc();        System.out.println("\n--------更新之后-------------");        mongo.showWord();        mongo.resetDoc();        System.out.println("\n--------reset之后------------");        mongo.showWord();        System.out.println("\n========批量更新=============");        System.out.println("\n========批量更新之前=============");        mongo.showWords();        mongo.updateStartWithH();        System.out.println("\n--------updateMany之前------------");        mongo.showWords();        mongo.resetStartWithH();        System.out.println("\n--------updateMany之后------------");        mongo.showWords();        System.out.println("\n=========replace============");        mongo.showWordOcean("--------replace 之前----------");        mongo.saveBlueDoc();        mongo.showWordOcean("--------replace 之后----------");        mongo.showWordOcean("--------replace 之前----------");        mongo.resetBlueDoc();        mongo.showWordOcean("--------replace 之后----------");        Connection.closeDBConntion();    }    private MongoCollection<Document> collection;    public MongoDBUpdate() {        MongoDatabase db = Connection.getDB();        collection = db.getCollection(Constant.COLLECTION_NAME);    }    public void saveBlueDoc(){        Document query = new Document("word","ocean");        Document doc = collection.find(query).iterator().next();        doc.put("category", "blue");        collection.replaceOne(query, doc);    }    public void resetBlueDoc(){        Document query = new Document("word","ocean");        Document doc = collection.find(query).iterator().next();        doc.put("category", "");        collection.replaceOne(query, doc);    }    public void showWord(String msg){        System.out.println("\n" + msg);        Document query = new Document("word","ocean");        MongoCursor<Document> cursor = collection.find(query).projection(new Document("word",1).append("category", 1)).iterator();        while(cursor.hasNext()){            System.out.println(cursor.next().toJson());        }    }    /**    * @Title: updateDoc     * @Description: TODO 把left 改成lefty       * @date 2017年6月11日 下午4:09:12        * @return void        * @throws     */    public void updateDoc(){        Document query = new Document("word","left");//        Bson update = set("word", "left");        Document update = new Document("$set",new Document("word","lefty")).append("$inc",new Document("size",1))                .append("$push", new Document("letters","y"));        collection.updateOne(query, update);    }    /**    * @Title: resetDoc     * @Description: TODO 把lefty 改成left    * @date 2017年6月11日 下午4:29:20        * @return void        * @throws     */    public void resetDoc(){        Document query = new Document("word","lefty");//        Bson update = set("word", "left");        Document update = new Document("$set",new Document("word","left")).append("$inc",new Document("size",-1))                .append("$pop", new Document("letters","1"));        collection.updateOne(query, update);    }    /**    * @Title: updateStartWithH     * @Description: TODO 批量更新       * @date 2017年6月11日 下午4:53:10        * @return void        * @throws     */    public void updateStartWithH(){        Bson query = Filters.eq("first", "h");        Document update = new Document("$set", new Document("category","New"));        collection.updateMany(query, update);    }    /**    * @Title: resetStartWithH     * @Description: TODO 批量更新,删除属性       * @date 2017年6月11日 下午4:53:34        * @return void        * @throws     */    public void resetStartWithH(){        Bson query = Filters.eq("first", "h");        Document update = new Document("$unset", new Document("category",""));        collection.updateMany(query, update);    }    public void showWord(){        Bson query = Filters.in("word","left","lefty");        MongoCursor<Document> cursor = collection.find(query).iterator();        while(cursor.hasNext()){            System.out.println(cursor.next().toJson());        }    }    public void showWords(){        Document query = new Document("first","h").append("last", "h");        MongoCursor<Document> cursor = collection.find(query).projection(new Document("word", 1).append("category", 1)).iterator();        while(cursor.hasNext()){            System.out.println(cursor.next().toJson());        }    }    public void showWordOcean(String msg){        System.out.println("\n" + msg);        Document query = new Document("word","ocean");        MongoCursor<Document> cursor = collection.find(query).projection(new Document("word",1).append("category", 1)).iterator();        while(cursor.hasNext()){            System.out.println(cursor.next().toJson());        }    }}

删除
“`
package org.programming.mongodb.crud;

import org.bson.Document;
import org.programming.mongodb.Connection;
import org.programming.mongodb.Constant;

import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;

public class MongoDBDelete {
private MongoCollection collection;
public static void main(String[] args) {
MongoDBDelete mongo = new MongoDBDelete();
System.out.println(“============删除前==========”);
mongo.showNewDocs();
mongo.deleteNewDocs();
System.out.println(“============删除后==========”);
mongo.showNewDocs();
}

public MongoDBDelete() {    MongoDatabase db = Connection.getDB();    collection = db.getCollection(Constant.COLLECTION_NAME);}public void deleteNewDocs(){    Document query = new Document("category","New");    collection.deleteMany(query);}public void showNewDocs(){    FindIterable<Document> queryResult= collection.find(new Document("category","New"));    MongoCursor< Document> cursor = queryResult.iterator();    while(cursor.hasNext()){        System.out.println(cursor.next());    }}

}

.