Mongodb系列- java客户端简单使用(CRUD)

Mongodb提供了很多的客户端: shell,python, java, node.js...等等.

以 java 为例实现简单的增删改查

在这里我们先封装一个mongodb管理类:

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.bson.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.CreateCollectionOptions;
import com.mongodb.client.result.DeleteResult;
/**
 * MongoDB管理类
 * @author jiangyuechao
 *
 */
public class MongoDBHelper {
    static Logger logger = LoggerFactory.getLogger(MongoDBHelper.class);

    static String ip = "10.80.18.1";
    //10.80.21.41 10.80.18.1
    static MongoClient mongoClient = new MongoClient(ip, 27017);
    //MongoDatabase实例是不可变的
    static MongoDatabase database;
    //firstDB
    public static void connect(String databaseName){
        database = mongoClient.getDatabase(databaseName);
    }

    public static MongoCollection<Document> getCollection(String collectionName){
        //MongoCollection实例是不可变的
        if(!collectionExists(collectionName)){
            return null;
        }
        MongoCollection<Document> collection = database.getCollection(collectionName);
        return collection;
    }

    public static boolean collectionExists(final String collectionName) {
         boolean collectionExists = database.listCollectionNames()
                .into(new ArrayList<String>()).contains(collectionName);
        return collectionExists;
        /*MongoIterable<String> mongoIterable = database.listCollectionNames();
        for (Iterator<String> iterator = mongoIterable.iterator(); iterator.hasNext();) {
            String name = iterator.next();
            logger.info("name:{}", name);
            if(name.equals(collectionName)){
                return true;
            }
        }
        return false;*/
    }

    public static void getAllDocuments(MongoCollection<Document> collection){
        MongoCursor<Document> cursor = collection.find().iterator();
        try {
            while (cursor.hasNext()) {
                System.out.println(cursor.next().toJson());
            }
        } finally {
            cursor.close();
        }
    }

    public static String getDocumentFirst(MongoCollection<Document> collection){
        Document myDoc = collection.find().first();
        return myDoc.toJson();
    }

    public static void createDocument(MongoCollection<Document> collection,Map<String,Object> map){
        System.out.println("--------------------");
        map.forEach((k,v)->{ System.out.println("Key : " + k + " Value : " + v);});
    }
    /**
     * 插入一个Document
     * @param collection
     * @param doc
     */
    public static void insertDocument(MongoCollection<Document> collection,Document doc){
        collection.insertOne(doc);
    }
    /**
     * 插入多个Document
     * @param collection
     * @param documents
     */
    public static void insertManyDocument(MongoCollection<Document> collection,List<Document> documents){
        collection.insertMany(documents);
    }
    /**
     * 显示创建集合
     */
    public static void explicitlyCreateCollection(String collectionName){
        database.createCollection(collectionName,
                new CreateCollectionOptions().capped(false));
    }

    // 删除集合的所有文档
    public static long deleteAllDocument(MongoCollection<Document> collection) {
        DeleteResult deleteResult = collection.deleteMany(new Document());
        long count = deleteResult.getDeletedCount();
        return count;
    }

    // 删除集合
    public static void deleteCollection(MongoCollection<Document> collection) {
        collection.drop();
    }

    /**
     * <p>
     * 关闭客户端
     * </p>
     *
     * @author jiangyuechao 2018年4月9日 上午11:23:36
     */
    public static void closeDb() {
        mongoClient.close();
    }
}

简单分析:

1. 使用 ip, port 连接mongodb数据库: static MongoClient mongoClient = new MongoClient(ip, 27017);

2. 连接数据库: database = mongoClient.getDatabase(databaseName);

3. 连接集合: MongoCollection<Document> collection = database.getCollection(collectionName);

4. 封装了基本的创建集合, insert ,delete操作.

使用实例

QuickTour例子:

package com.chaochao.mongodb;
import static com.mongodb.client.model.Filters.eq;
import static com.mongodb.client.model.Filters.gte;
import static com.mongodb.client.model.Filters.lt;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.bson.Document;

import com.mongodb.client.MongoCollection;
import com.mongodb.client.model.Filters;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;

public class QuickTour {
    static String databaseName = "firstDB";
    static String collectionName = "firstCollection1";
    static MongoCollection<Document> firstCollection;

    public static void main(String[] args) {
        QuickTour  quickTour = new QuickTour();
        quickTour.setUp();
//        quickTour.updateMultipleDoc();
//        quickTour.deleteMultiple();
        quickTour.getAllDocuments();
    }

    /**
     * 连接数据库
     */
    public void setUp(){
        MongoDBHelper.connect(databaseName);
        firstCollection =  MongoDBHelper.getCollection(collectionName);
    }
    public void getAllDocuments(){
        MongoDBHelper.getAllDocuments(firstCollection);
    }

    public void getDocumentFirst(){
        MongoDBHelper.connect(databaseName);
        MongoCollection<Document> collection = MongoDBHelper.getCollection(collectionName);
        String json = MongoDBHelper.getDocumentFirst(collection);
        System.out.println(json);
    }

    /**
     * 返回符合匹配条件的第一个doc
     * @param collection
     */
    public void getDocMatcheFilter(){
        Document myDoc = firstCollection.find(eq("y", 2)).first();
        System.out.println(myDoc.toJson());
    }

    public void getAllDocMatcheFilter(){
        firstCollection.find(Filters.gt("i", 10)).forEach((Document document)->{System.out.println(document.toJson());});
    }

    public void updateOneDoc(){
        UpdateResult updateResult = firstCollection.updateOne(Filters.eq("i", 12), new Document("$set", new Document("i", 21)));
        System.out.println(updateResult.getModifiedCount());
    }
    public void updateMultipleDoc(){
        UpdateResult updateResult = firstCollection.updateMany(lt("i", 100), new Document("$inc", new Document("i", 100)));
        System.out.printf("count:%s,insertedId:%s",updateResult.getModifiedCount(),updateResult.getUpsertedId());
        System.out.println();
    }

    public void deleteOne(){
        DeleteResult deleteResult = firstCollection.deleteOne(eq("i", 121));
        System.out.println(deleteResult.getDeletedCount());
    }
    public void deleteMultiple(){
        DeleteResult deleteResult = firstCollection.deleteMany(gte("i", 100));
        System.out.println(deleteResult.getDeletedCount());
    }

    /**
     * 插入一个doc
     * @param collection
     */
    public void insertDocument(){
        Document doc = new Document("name", "MongoDB")
                    .append("type", "database")
                    .append("count", 1)
                    .append("versions", Arrays.asList("v3.2", "v3.0", "v2.6"))
                    .append("info", new Document("x", 203).append("y", 102));
        MongoDBHelper.insertDocument(firstCollection, doc);
    }
    /**
     * 插入多个doc
     * @param collection
     */
    public void insertMultipleDoc(){
        List<Document> documents = new ArrayList<Document>();
        for (int i = 0; i < 100; i++) {
            documents.add(new Document("i", i));
        }

        MongoDBHelper.insertManyDocument(firstCollection, documents);
    }

    public void countDocs(){
        System.out.println(firstCollection.getNamespace().getCollectionName()+"-count:"+firstCollection.count());
    }

}

这个例子展示了基本的增删改查操作,直接可以运行..安装mongodb参照官网,挺简单的,java 连接mongodb参照我前边的博客: Java驱动远程连接mongoDB(简明易懂版)

比如我的获取firstCollection1 集合的所有文档 :

{ "_id" : { "$oid" : "5a631d80070db90c43a3477d" }, "x" : 1.0 }
{ "_id" : { "$oid" : "5a631db0070db90c43a3477e" }, "y" : 2.0 }
{ "_id" : 10.0, "calc" : 2.555555000005E12 }
{ "_id" : { "$oid" : "5a66d717ba3c702c14df31b3" }, "name" : "MongoDB", "type" : "database", "count" : 1, "versions" : ["v3.2", "v3.0", "v2.6"], "info" : { "x" : 203, "y" : 102 } }
{ "_id" : { "$oid" : "5a9220cafffeed155066c035" }, "domainID" : { "$numberLong" : "2001" }, "type" : "chao" }

mongodb简单的CRUD还是很好理解的,这里只是一个入门,让你快速熟悉它的操作,跟传统的数据库逻辑还是一致的:

1. 连接数据库

2. 执行操作

3. 关闭连接

那些复杂的查询和更新操作,我们放在后边介绍,比如: 如何匹配数组中的元素? 如何匹配嵌入文档,查询值为 null 的字段 等等..

转载注明出处: http://www.cnblogs.com/jycboy/p/8758754.html

原文地址:https://www.cnblogs.com/jycboy/p/8758754.html

时间: 2024-10-16 10:57:21

Mongodb系列- java客户端简单使用(CRUD)的相关文章

8天掌握EF的Code First开发系列之2 简单的CRUD操作

本文出自8天掌握EF的Code First开发系列,经过自己的实践整理出来. 本篇目录 创建控制台项目 根据.Net中的类来创建数据库 简单的CRUD操作 数据库模式更改介绍 本章小结 本人的实验环境是VS 2012,windows 7,MSSQL Server 2008 R2. 创建控制台项目 1. 新建控制台应用项目 2. 通过NuGet安装Entity Framework 6 根据.Net中的类来创建数据库 上面的步骤之后,我们就可以开始写代码了.在写代码之前,你要始终记得,每个类就是相应

mongodb的java客户端的设计思想

链接见http://api.mongodb.org/java/current/?_ga=1.111551751.200271495.1409034486 整体结构分为 com.mongodb是核心类.其中包含接口.实现类.枚举类型.异常类.见http://api.mongodb.org/java/current/com/mongodb/package-frame.html 实现类的重要性比异常类要高.实现类的方法必须要尽量都要理解,可能一个功能就卡在某个实现类的某个方法,这个事致命的. 看看怎么

hadoop系列二:HDFS文件系统的命令及JAVA客户端API

转载请在页首明显处注明作者与出处 http://www.cnblogs.com/zhuxiaojie/p/6391518.html 一:说明 此为大数据系列的一些博文,有空的话会陆续更新,包含大数据的一些内容,如hadoop,spark,storm,机器学习等. 当前使用的hadoop版本为2.6.4 上一篇:hadoop系列一:hadoop集群安装 二:HDFS的shell命令 上一章说完了安装HADOOP集群部分,这一张讲HDFS. 其实基本上操作都是通过JAVA API来操作,所以这里的s

[MongoDB]MongoDB与JAVA结合使用CRUD

汇总: 1. [MongoDB]安装MongoDB2. [MongoDB]Mongo基本使用:3. [MongoDB]MongoDB的优缺点及与关系型数据库的比较4. [MongoDB]MongoDB与JAVA结合使用CRUD 使用起来也相当简单,由于MongoDB是类文件的数据库,所以其操作起来非常方便 首先下载相应的jar包,这里我直接使用Maven自动获取,以下为POM文件中的配置: <dependency> <groupId>junit</groupId> &l

Hibernate系列(五):利用Hibernate完成简单的CRUD操作

这里利用Hibernate操作数据库完成简单的CRUD操作. 首先,我们需要先写一个javabean: package cn.itcast.domain; import java.util.Date; public class User { private int id; private String name; private Date birthday; public int getId() { return id; } public void setId(int id) { this.id

java memcached 简单例子 使用spymemcached客户端

只是一个简单的例子,没有太多需要解释的. 需要注意的是,如果存对象的话,对象需要实现序列化的接口. 引用了一个jar:spymemcached-2.10.3.jar 直接上代码: 1 package memTest; 2 3 import net.spy.memcached.MemcachedClient; 4 5 6 import java.io.IOException; 7 import java.io.Serializable; 8 import java.net.InetSocketAd

redis的java客户端Jedis简单封装

经过我们团队的一番讨论,最终决定使用redis来进行我们的业务缓存.redis会将数据缓存到内存中,运行效率会很快.同时异步将数据写入到磁盘中,进行持久化. 且redis支持主从同步,支持分布式部署,支持N多数据结构,这对于我们有着莫大的吸引力. 参见:http://blog.csdn.net/yichenlian/article/details/27207383 我们团队讨论的焦点是在于redis的灾备恢复问题.由于redis的持久化是异步的,总会有一点时间内存中数据和磁盘数据不同步的情况(当

《ElasticSearch6.x实战教程》之简单搜索、Java客户端(上)

第五章-简单搜索 众里寻他千百度 搜索是ES的核心,本节讲解一些基本的简单的搜索. 掌握ES搜索查询的RESTful的API犹如掌握关系型数据库的SQL语句,尽管Java客户端API为我们不需要我们去实际编写RESTful的API,但在生产环境中,免不了在线上执行查询语句做数据统计供产品经理等使用. 数据准备 首先创建一个名为user的Index,并创建一个student的Type,Mapping映射一共有如下几个字段: 创建名为user的Index PUT http://localhost:9

ZooKeeper系列(四)—— Java 客户端 Apache Curator

一.基本依赖 Curator 是 Netflix 公司开源的一个 Zookeeper 客户端,目前由 Apache 进行维护.与 Zookeeper 原生客户端相比,Curator 的抽象层次更高,功能也更加丰富,是目前 Zookeeper 使用范围最广的 Java 客户端.本篇文章主要讲解其基本使用,项目采用 Maven 构建,以单元测试的方法进行讲解,相关依赖如下: <dependencies> <!--Curator 相关依赖--> <dependency> &l