2019-10-29 springboot2.x mongodb

2020-02-01  本文已影响0人  江江江123

mongo 分布式nosql 数据库
特点:基于硬盘创建的虚拟内存,有点不用占用太多内存,缺点速度不如redis快
每次增删改查需要初始化后操作
内存存储的为gson数据

mongo shell :支持js语法
mongo 初始化shell : rs.initiate()

docker-compose 启动

mongodb:
    container_name: sc-mongo
    image: mongo
    ports:
    - 27017:27017
    networks:
    - sc-net
    volumes:
    - local_mongodb_data_v1:/data/db
networks:
  sc-net:
    external: false
volumes:
  local_mongodb_data_v1:

springboot2.x 操作mongo
构建一个稍复杂的类goods

@Document("goods")
public class Goods {
    @Id
    private String id;
    private String name;
    private Category category;
    private List<Sku> skuList;
    
    public static class Category {
        private String id;
        private String name;

        public Category(String id, String name) {
            this.id = id;
            this.name = name;
        }

        public String getId() {
            return id;
        }

        public void setId(String id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }

    public static class Sku {
        private String id;
        private String name;
        private Double price;

        public Sku(String id, String name, Double price) {
            this.id = id;
            this.name = name;
            this.price = price;
        }

        public String getId() {
            return id;
        }

        public void setId(String id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public Double getPrice() {
            return price;
        }

        public void setPrice(Double price) {
            this.price = price;
        }
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Category getCategory() {
        return category;
    }

    public void setCategory(Category category) {
        this.category = category;
    }

    public List<Sku> getSkuList() {
        return skuList;
    }

    public void setSkuList(List<Sku> skuList) {
        this.skuList = skuList;
    }
}

springboot 使用mongo

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
spring:
  application:
    name: spirng-boot-mongodb
  data:
    mongodb:
      host: localhost   #同127.0.0.1
      port: 27017
      database: test    #指定操作的数据库

使用

   @Autowired
   MongoTemplate mongoTemplate

一些案列:
1.插入数据

        Goods goods = new Goods();
        goods.setName("教科书");
        goods.setCategory(new Goods.Category("1","书籍"));
        goods.setSkuList(new ArrayList<Goods.Sku>(){{
            add(new Goods.Sku("1","语文",19.8));
            add(new Goods.Sku("2","数学",11.1));
            add(new Goods.Sku("3","英语",9.6));
        }});
        mongoTemplate.insert(goods);

2.查寻分类id为1的goods

        List<Goods> goodsList = mongoTemplate
                .find(Query.query(Criteria.where("category._id").is("1"))
                        , Goods.class);

3.查询skuid为1的数据

        MatchOperation match = Aggregation.match(Criteria.where("skuList._id").in("1"));
        UnwindOperation skuList = Aggregation.unwind("skuList");
        ArrayList<AggregationOperation> aggregationOperations = new ArrayList<>();
        aggregationOperations.add(skuList);
        aggregationOperations.add(match);
        GroupOperation groupOperation = Aggregation.group("_id").first("name")
                .as("name").first("category").as("category")
                .push("skuList").as("skuList");
        aggregationOperations.add(groupOperation);

        Aggregation aggregation = Aggregation.newAggregation(aggregationOperations);
        AggregationResults<Goods> goods = mongoTemplate.aggregate(aggregation, "goods", Goods.class);
        List<Goods> results = goods.getMappedResults();
上一篇下一篇

猜你喜欢

热点阅读