当前位置: 首页>数据库>正文

Javamongo嵌套查询 mongodb像sql那样嵌套

写在前面:

MongoDb之前项目中接触到过,那时啥都不懂,回去看教程琢磨了半天好不容易才安装好了服务,对它都还是一知半解的状态。什么文档型数据库什么查询快速什么nosql都是对它片面的评价,还没有真正认识它了解它。现在借此机会,来看看它到底能干什么。

 

首先,MongoDB是文档型(Document store)的NoSQL数据库,数据以文档(对应关系型数据库的记录,本文有时候会混用)的形式在MongoDB中保存,文档实际上就是一个个JSON字符串。使用JSON的好处是非常直观,通过一系列的Key-Value键值对来表示数据。Value可以是普通的整型、字符串,可以是数组,也可以是嵌套的子文档,使用嵌套的好处是在MongoDB中仅需一次简单的查询就能够获取到你所需的数据。

 

举电商领域为例,网易严选上卖的上衣和裤子两种商品,除了有共同属性,如产地、价格、材质、颜色等外,还有各自有不同的属性集,如上衣的独有属性是肩宽、胸围、袖长等,裤子的独有属性是臀围、脚口和裤长等。这些独有属性可以直接以JSON子文档的方式嵌套在商品这个文档中,一次查询直接获取全部内容,不需要进行多表join;MongoDB文档的另一大特点是模式灵活不同文档相同key的value类型可以是整形也可以是字符串等其他类型,不同文档可以有不同的key,比如有些商品有折扣字段,可以定义不同会员等级的不同折扣。在电商配套的物流领域,可以将一个快递的物流信息直接嵌套在以商品id为唯一索引的文档中,一次查询就可以获取完整的快递流向信息。

安装:

1.登录MongoDb官网选择相对应的版本 64位*64 安装包为MSI格式的

https://www.mongodb.com/download-center/community

Javamongo嵌套查询 mongodb像sql那样嵌套,Javamongo嵌套查询 mongodb像sql那样嵌套_java,第1张

2.安装过程中,可以通过点击 "Custom(自定义)" 按钮来设置你的安装目录。我安装在了E盘mongodb目录下。

Javamongo嵌套查询 mongodb像sql那样嵌套,Javamongo嵌套查询 mongodb像sql那样嵌套_Javamongo嵌套查询_02,第2张

3.下一步安装 "install mongoDB compass" 不勾选(当然你也可以选择安装它,可能需要更久的安装时间),MongoDb Compass 是一个图形界面管理工具。(类似于数据库图形化管理工具navicat)后面我用的是Studio 3T来管理MongoDb。

Javamongo嵌套查询 mongodb像sql那样嵌套,Javamongo嵌套查询 mongodb像sql那样嵌套_mysql_03,第3张

4. 安装完成后在E:\mongodb\data中创建数据目录日志目录为的就是后面配置MongoDb服务,省的以后每次通过命令行来启动服务。

Javamongo嵌套查询 mongodb像sql那样嵌套,Javamongo嵌套查询 mongodb像sql那样嵌套_数据库_04,第4张

Javamongo嵌套查询 mongodb像sql那样嵌套,Javamongo嵌套查询 mongodb像sql那样嵌套_java_05,第5张

5.打开MongoDb自带的mongod.cfg配置文件。去更改里面默认的数据目录和日志目录地址。换成上面自己新建的数据和日志目录。

Javamongo嵌套查询 mongodb像sql那样嵌套,Javamongo嵌套查询 mongodb像sql那样嵌套_Javamongo嵌套查询_06,第6张

Javamongo嵌套查询 mongodb像sql那样嵌套,Javamongo嵌套查询 mongodb像sql那样嵌套_mysql_07,第7张

6.管理员模式打开命令行窗口(C:),进入到bin目录下。把上面的配置文件进行服务安装

mongod.exe --config "E:\mongodb\bin\mongod.cfg"--install

Javamongo嵌套查询 mongodb像sql那样嵌套,Javamongo嵌套查询 mongodb像sql那样嵌套_mongodb_08,第8张

Javamongo嵌套查询 mongodb像sql那样嵌套,Javamongo嵌套查询 mongodb像sql那样嵌套_数据库_09,第9张

7.打开任务管理器,选择MongoDb。可以看到 服务启动命令已经换成了上面配置的命令了。点击启动,即可启动我们的MongoDb服务。

Javamongo嵌套查询 mongodb像sql那样嵌套,Javamongo嵌套查询 mongodb像sql那样嵌套_数据库_10,第10张

8.打开cmd命令行窗口,输入mongo,,即可看到连接服务器成功。

Javamongo嵌套查询 mongodb像sql那样嵌套,Javamongo嵌套查询 mongodb像sql那样嵌套_mongodb_11,第11张

基本概念

SQL术语

MongoDb术语

含义

Database

Database

数据库

Table

Collection

数据库表/集合

Row

document

行/文档

Column

Field

字段/域

Table join

/

表连接/mongo不支持

Primary key

Primary key

主键/mongo以_id为主键

常用命令

展示所有数据库

show dbs

显示当前数据库

db

显示所有集合

show collections

使用当前数据库

use MyTestDB

插入:table01集合(数据表)中插入nameageqq信息

db. table01.insert({name:"FFF",age:22,qq:"qqq"})

插入:可以自行指定_id,但长度要达到48

db.table01.insert({_id:ObjectId("123456789987654321000012"),name:"天天"})

查找指定

db. table01.findOne({qq:"qqq"})

查找所有

db. table01.find({})

替换(就剩age)

db. table01.update({name:"CCC"},{age:18})

替换name:"向上",age:99

db.table01.update({name:"天天"},{name:"向上",age:99})

新增字段 $set (新增nameage字段)

db. table01.update({qq:"qqq"},{$set:{name:"FFF",age:22}})

删除字段 $unset(删除name字段)

db. table01.update({qq:"qqq"},{$unset:{name:1}})

自增  $inc(在原来基础上再加500)

db.table01.update({_id:ObjectId("123456789987654321000012")},{$inc:{salart:500}})

删除记录

db.table01.deleteMany ({qq:"qqq"})

清空集合

db.table01.remove({})

删除一个集合(数据库也没了)

db.table01.drop()

大于40

db.table01.find({age:{$gt:40}})

小于50

db.table01.find({age:{$lt:40}})

大于40 小于 50

db.table01.find({age:{$gt:40,$lt:50}})

跳过前2条显示2条

db.table01.find({}).skip(2).limit(2)

排序 1:正序 -1:倒叙

db.table01.find().sort({age:-1})

在项目中操作MongoDb

配置pom和yml

<!--mongodb-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
spring:
  data:
    mongodb:
      uri: mongodb://127.0.0.1:27017/MongoDbTest

主要用到了SpringBoot给我们提供的MongoTemplate类似JPA和MybatisPlus给我们提供的

一个模板,方便我们进行增删改查。

@Autowired
private MongoTemplate mongoTemplate;

@ApiOperation(value = "新增用户",notes = "新增100个用户")
@PostMapping("/add")
public WebResponse add() {
    List<SysUser> userList = new ArrayList<>();
    SysUser sysUser = null;
    for (int i = 1; i <=100 ; i++) {
        sysUser = new SysUser();
        sysUser.setId(i);
        sysUser.setUserName("ys"+i);
        sysUser.setCreateTime(new Date());
        sysUser.setDelFlag(0);
        sysUser.setStatus(1);
        userList.add(sysUser);
        mongoTemplate.insert(sysUser);
    }
    return WebResponse.resSuccess("新增成功",userList.size());
}

Javamongo嵌套查询 mongodb像sql那样嵌套,Javamongo嵌套查询 mongodb像sql那样嵌套_java_12,第12张

@ApiOperation(value = "删除语句",notes = "根据_id来删除")
@ApiImplicitParam(name = "id",value = "id值",required = true,dataType = "int")
@DeleteMapping("/delete")
public WebResponse delete(Integer id){
    //查询
    Query query = new Query();
    //条件
    Criteria criteria = new Criteria();
    criteria.and("_id").is(id);
    query.addCriteria(criteria);


    DeleteResult deleteResult = mongoTemplate.remove(query,SysUser.class);
    return WebResponse.resSuccess("删除成功",deleteResult.getDeletedCount());
}

@ApiOperation(value = "修改用户信息",notes = "根据_id和userName来修改userName")
@ApiImplicitParams({
        @ApiImplicitParam(name = "id",value = "id值",required = true,dataType = "int"),
        @ApiImplicitParam(name = "userName",value = "userName",required = true,dataType = "String"),
})
@PutMapping("/update")
public WebResponse update(Integer id,String userName){
    //查询
    Query query = new Query();
    //条件
    Criteria criteria = new Criteria();
    criteria.and("_id").is(id);
    query.addCriteria(criteria);


    Update update = new Update();
    update.set("userName",userName);
    //新增了一个字段newziduan
    update.set("newziduan","hahhaha");


    UpdateResult updateResult = mongoTemplate.updateMulti(query, update, SysUser.class);
    return WebResponse.resSuccess("修改成功",updateResult.getModifiedCount());
}

Javamongo嵌套查询 mongodb像sql那样嵌套,Javamongo嵌套查询 mongodb像sql那样嵌套_mongodb_13,第13张

Javamongo嵌套查询 mongodb像sql那样嵌套,Javamongo嵌套查询 mongodb像sql那样嵌套_mysql_14,第14张

@ApiOperation(value = "查询列表",notes = "根据条件来查询列表")
@ApiImplicitParams({
        @ApiImplicitParam(name = "userName",value = "名字",required = false,dataType = "String")
})
@GetMapping("/list")
public WebResponse list(String userName){
    //查询
    Query query = new Query();
    //条件
    Criteria criteria = new Criteria();


    //姓名 模糊查询
    Pattern pattern = null;
    if(!StringUtils.isEmpty(userName)){
        //用正则匹配进行模糊查询
        pattern = Pattern.compile("^.*" + userName + ".*$", Pattern.CASE_INSENSITIVE);
        criteria.and("userName").regex(pattern);
    }
    query.addCriteria(criteria);


    //统计查询总条数
    long count = mongoTemplate.count(query, SysUser.class);
    System.out.println("统计查询总条数"+count);


    return WebResponse.resSuccess("查询成功",mongoTemplate.find(query, SysUser.class));
}

Nice~


https://www.xamrdz.com/database/6ds1959980.html

相关文章: