• MongoDB学习-->命令行增删改查&JAVA驱动操作Mongodb


    MongoDB 是一个基于分布式文件存储的数据库。
    由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
    MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
    mongodb是目前在IT行业非常流行的一种非关系型数据库(NoSql)
     
    大纲如下:
    • Mongodb介绍/安装
    • 命令行增删改查操作
    • 客户端工具mongochef使用
    • JAVA驱动操作Mongodb
    • Spring Data Mongodb框架搭建
    • Spring Data Mongodb框架之MongoTemplate
    • Spring Data Mongodb框架之代码连接数据库
    • Spring Data Mongodb框架之去掉_class字段
    • Spring Data Mongodb框架之Repository
    • 自增ID通用设置,开发者不用关心
    • 批量更新封装
    • gridfs文件上传下载操作
    • DBRef的使用
    • mapreduce实战
    • aggregation实战
    • 项目实战:用mongodb设计以及编码实现一个权限系统

    mongodb

    数据结构不固定的

    bson(json)

    {id:1,name:"张三"}

    {id:2,name:"李四",age:22,address:["上海1号","上海2号"]}

    DB

    集合(collection) ---> table

    文档(document) ---> row

    key ---> col

    命令行增删改查:

    show dbs 展示所有数据库


    use test 进入某个数据库


    db.createCollection("test"); 创建集合


    show collections; 查看集合


    db.test2.save({"name":"json"}) 插入数据


    db.test2.find() 查询数据


    db.test2.findOne() 查询第一条


    db.test2.find().skip(1).limit(1)分页用法


    db.test.find({}).sort({age:1}) 1升序 -1降序


    db.test.find({},{age:1}) 只显示需要的字段 1为显示 -1为不显示


    db.test.update({name:"kk"},{"$set":{age:11}},true,true) 第三个参数为true表示要修改的数据不存在则插入一条新的,false不修改也不创建。第四个参数为true表示修改所有满足条件的数据,false修改第一条

    db.test.drop() 删除集合


    db.test.remove({}) 删除集合中所有数据

    JAVA驱动操作Mongodb:

    package com.tangzhe.mongodb;
    
    import com.mongodb.MongoClient;
    import com.mongodb.MongoClientOptions;
    import com.mongodb.ServerAddress;
    import com.mongodb.client.FindIterable;
    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.UpdateOptions;
    import org.bson.Document;
    import org.junit.Before;
    import org.junit.Test;
    
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    
    /**
     * Created by 唐哲
     * 2018-03-10 18:00
     * 测试 Java 操作 MongoDB
     */
    public class MongodbTest {
    
        private MongoCollection<Document> collection = null;
    
        //@Before
        public void before() {
            //配置mongo客户端
            MongoClientOptions options = MongoClientOptions.builder().connectTimeout(60000).build();
            //创建mongo客户端
            MongoClient client = new MongoClient(new ServerAddress("localhost", 27017), options);
            //获取数据库
            MongoDatabase db = client.getDatabase("mamabike");
            //获取集合,相当于关系型数据库中的表
            collection = db.getCollection("test");
        }
    
        /**
         * 插入一条数据
         */
        //@Test
        public void insertOne() {
            collection.insertOne(new Document("name", "zhangsan").append("age", 18));
        }
    
        /**
         * 批量插入
         */
        //@Test
        public void insertMany() {
            List<Document> documents = new ArrayList<>(2);
            documents.add(new Document("name", "张三").append("age", 19));
            documents.add(new Document("name", "李四").append("age", 20));
            collection.insertMany(documents);
        }
    
        /**
         * 修改张三的年龄为22
         */
        //@Test
        public void updateByName() {
            collection.updateOne(Filters.eq("name", "张三"),
                    new Document("$set", new Document("age", 22)));
        }
    
        /**
         * 如果查询到则进行修改
         * 如果查询不到则插入
         */
        //@Test
        public void updateOrInsert() {
            collection.updateOne(Filters.eq("name", "lisi"),
                    new Document("$set", new Document("age", 23)),
                    new UpdateOptions().upsert(true));
        }
    
        /**
         * 删除一条数据
         */
        //@Test
        public void deleteOne() {
            collection.deleteOne(Filters.eq("name", "lisi"));
        }
    
        /**
         * 查询第一条数据
         */
        //@Test
        public void findFirst() {
            Document doc = collection.find().first();
            System.out.println(doc);
        }
    
        /**
         * 查询所有
         */
        //@Test
        public void findAll() {
            FindIterable<Document> documents = collection.find();
            MongoCursor<Document> iterator = documents.iterator();
            while (iterator.hasNext()) {
                System.out.println(iterator.next());
            }
        }
    
        /**
         * 多条件查询
         */
        //@Test
        public void findByQuery() {
            Document doc = collection.find(
                    Filters.and(
                            Filters.eq("name", "张三"),
                            Filters.eq("age", 22)
                    ))
                    .first();
            System.out.println(doc);
        }
    
    }
    
    package com.tangzhe.mongodb;
    
    import com.mongodb.MongoClient;
    import com.mongodb.MongoClientOptions;
    import com.mongodb.ServerAddress;
    import com.mongodb.client.MongoCollection;
    import com.mongodb.client.MongoDatabase;
    import org.bson.codecs.configuration.CodecRegistries;
    import org.bson.codecs.configuration.CodecRegistry;
    import org.junit.Before;
    import org.junit.Test;
    
    /**
     * Created by 唐哲
     * 2018-03-10 19:39
     */
    public class MongodbTest2 {
    
        //可以指定类型
        private MongoCollection<User> collection = null;
    
        //@Before
        public void before() {
            //配置mongo客户端
            MongoClientOptions options = MongoClientOptions.builder().connectTimeout(60000).build();
            //创建mongo客户端
            MongoClient client = new MongoClient(new ServerAddress("localhost", 27017), options);
            //获取数据库
            MongoDatabase db = client.getDatabase("mamabike");
    
            //注册类型转换器
            CodecRegistry codecRegistry = CodecRegistries.fromRegistries(CodecRegistries.fromCodecs(new UserCode()));
    
            //获取集合,相当于关系型数据库中的表
            collection = db.getCollection("test", User.class).withCodecRegistry(codecRegistry);
        }
    
        /**
         * 插入一个javabean到mongodb
         */
        //@Test
        public void insertTest() {
            User user = new User();
            user.setName("王五");
            user.setAge(33);
            collection.insertOne(user);
        }
        
        //从mongodb读取数据,封装成javabean
        //@Test
        public void findTest() {
            User user = collection.find().first();
            System.out.println(user);
        }
    
    }
    
    package com.tangzhe.mongodb;
    
    import lombok.Data;
    import org.bson.types.ObjectId;
    
    /**
     * Created by 唐哲
     * 2018-03-10 19:38
     */
    @Data
    public class User {
    
        private ObjectId _id;
        private String name;
        private Integer age;
    
    }
    
    package com.tangzhe.mongodb;
    
    import org.bson.BsonReader;
    import org.bson.BsonWriter;
    import org.bson.codecs.Codec;
    import org.bson.codecs.DecoderContext;
    import org.bson.codecs.EncoderContext;
    
    /**
     * Created by 唐哲
     * 2018-03-10 19:43
     * 转换器
     */
    public class UserCode implements Codec<User> {
    
        @Override
        public User decode(BsonReader bsonReader, DecoderContext decoderContext) {
            bsonReader.readStartDocument();;
            User user = new User();
            user.set_id(bsonReader.readObjectId("_id"));
            user.setName(bsonReader.readString("name"));
            user.setAge(bsonReader.readInt32("age"));
            bsonReader.readEndDocument();
            return user;
        }
    
        @Override
        public void encode(BsonWriter bsonWriter, User user, EncoderContext encoderContext) {
            bsonWriter.writeStartDocument();
            bsonWriter.writeString("name", user.getName());
            bsonWriter.writeInt32("age", user.getAge());
            bsonWriter.writeEndDocument();
        }
    
        @Override
        public Class<User> getEncoderClass() {
            return User.class;
        }
    
    }
    

     

     

  • 相关阅读:
    pku 1061 青蛙的约会 扩展欧几里得
    莫比乌斯反演
    51Nod 1240 莫比乌斯函数
    51Nod 1284 2 3 5 7的倍数 容斥原理
    51Nod 1110 距离之和最小 V3 中位数 思维
    51Nod 1108 距离之和最小 V2 1096 距离之和最小 中位数性质
    HDU 2686 Matrix 多线程dp
    51Nod 1084 矩阵取数问题 V2 双线程DP 滚动数组优化
    HDU 1317XYZZY spfa+判断正环+链式前向星(感觉不对,但能A)
    设计模式(4)---单例模式
  • 原文地址:https://www.cnblogs.com/tangzhe/p/8599164.html
Copyright © 2020-2023  润新知