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;
    }

}

 

 

原文地址:https://www.cnblogs.com/tangzhe/p/8599164.html