Java 连接 Mongodb 增删改查操作

对于NoSQL并没有一个明确的范围和定义,但是他们都普遍存在下面一些共同特征:

  1. 不需要预定义模式:不需要事先定义数据模式,预定义表结构。数据中的每条记录都可能有不同的属性和格式。当插入数据时,并不需要预先定义它们的模式。
  2. 无共享架构:相对于将所有数据存储的存储区域网络中的全共享架构。NoSQL往往将数据划分后存储在各个本地服务器上。因为从本地磁盘读取数据的性能往往好于通过网络传输读取数据的性能,从而提高了系统的性能。
  3. 弹性可扩展:可以在系统运行的时候,动态增加或者删除结点。不需要停机维护,数据可以自动迁移。
  4. 分区:相对于将数据存放于同一个节点,NoSQL数据库需要将数据进行分区,将记录分散在多个节点上面。并且通常分区的同时还要做复制。这样既提高了并行性能,又能保证没有单点失效的问题。
  5. 异步复制:和RAID存储系统不同的是,NoSQL中的复制,往往是基于日志的异步复制。这样,数据就可以尽快地写入一个节点,而不会被网络传输引起迟延。缺点是并不总是能保证一致性,这样的方式在出现故障的时候,可能会丢失少量的数据。
  6. BASE:相对于事务严格的ACID特性,NoSQL数据库保证的是BASE特性。BASE是最终一致性和软事务。

Mongodb是Nosql的比较方便成熟的一种数据库


下载安装Mongodb 官网地址 https://www.mongodb.com/download-center#community


下载Java连接Mongodb的驱动Jar包: 地址 http://mongodb.github.io/mongo-java-driver/ 导入到项目中


代码部分

public class DbNopass {
    private String ip = "localhost";
    private Integer port = 27017;
    private MongoClient mongoClient;
    private MongoDatabase mongoDatabase;
    private MongoCollection<Document> collection;


    /**
     * 连接DB
     */
    public void connectDb() {
        mongoClient = new MongoClient(ip, port);
        mongoDatabase = mongoClient.getDatabase("mycol");
        System.out.println("------连接数据库成功------");
        collection = mongoDatabase.getCollection("test");
        System.out.println("------集合 test 选择成功------\r\n");

    }

    /**
     * 创建集合
     */
    public void createCollection() {
        mongoDatabase.createCollection("test");
        System.out.println("------集合test创建成功------\r\n");
    }

    /**
     * 插入文档
     */
    public void insertDocument() {
        /**
         * 1. 创建文档 org.bson.Document 参数为key-value的格式 2. 创建文档集合List<Document> 3.
         * 将文档集合插入数据库集合中 mongoCollection.insertMany(List<Document>) 插入单个文档可以用
         * mongoCollection.insertOne(Document)
         */
        Document document = new Document("title", "MongoDB").append("description", "database").append("likes", 100)
                .append("by", "Fly");
        List<Document> documents = new ArrayList<Document>();
        documents.add(document);
        collection.insertMany(documents);
        System.out.println("------文档插入成功------\r\n");
    }

    /*
     * 查询
     */
    public void select(){
        //检索所有文档  
        /** 
        * 1. 获取迭代器FindIterable<Document> 
        * 2. 获取游标MongoCursor<Document> 
        * 3. 通过游标遍历检索出的文档集合 
        * */  
        FindIterable<Document> findIterable = collection.find();  
        MongoCursor<Document> mongoCursor = findIterable.iterator(); 
        System.out.println("------查询结果------");
        while(mongoCursor.hasNext()){  
           System.out.println(mongoCursor.next());  
        } 
        System.out.println("\r\n");

    }

    /*
     * 更新
     */
    public void update(){
        //更新文档   将文档中likes=100的文档修改为likes=200   
        collection.updateMany(Filters.eq("likes", 100), new Document("$set",new Document("likes",200)));  
        //检索查看结果  
        FindIterable<Document> findIterable = collection.find();  
        MongoCursor<Document> mongoCursor = findIterable.iterator();  
        System.out.println("------查看更新之后的数据------");
        while(mongoCursor.hasNext()){  
           System.out.println(mongoCursor.next());  
        } 
        System.out.println("\r\n");
    }

    /*
     * 删除
     */
    public void delete(){
        //删除符合条件的第一个文档  
        collection.deleteOne(Filters.eq("likes", 200));  
        //删除所有符合条件的文档  
        collection.deleteMany (Filters.eq("likes", 200));  
        //检索查看结果  
        FindIterable<Document> findIterable = collection.find();  
        MongoCursor<Document> mongoCursor = findIterable.iterator();  
        System.out.println("------查看删除之后的数据------");
        while(mongoCursor.hasNext()){  
          System.out.println(mongoCursor.next());  
        }  
        System.out.println("\r\n");

    }
    public static void main(String args[]) {

        DbNopass db = new DbNopass();
        db.connectDb();
        db.createCollection();
        db.insertDocument();
        db.select();
        db.update();
        db.delete();

    }
}

打印结果

这里写图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小虎哥的技术博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值