MongoDB:MongoDB使用(有示例说明,通俗易懂)


----------------------------------------------------------------------------------以下是正文-----------------------------------------------------------------------------------


在这里插入图片描述

一、什么是NoSQL?

       要说MongoDB,我们需要先了解一下什么是NoSQL?
       NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL",指的是非关系型的数据库。我们熟悉的MySQL、Oracle、SqlServer等是关系型数据库,并不是NoSQL,今天所要了解的MongoDB便是NoSQL。
       以本人目前所了解的来说一下关系型数据库和非关系型数据库的明显差别:关系型数据库的使用需要我们建好表,也就是表里有字段,而你想添加数据到表里,只能添加对应的字段、对应的数据类型,表里没有的字段,如果你想添加对应的数据是添加不了的,需先插入该字段,举个例子,假如现在建了一张user表,表里只有name一个字段,现在你想添加小明这个名字到user表里完全没有问题,但如果你想添加18岁这个年龄到user表里,却不行,需要到user表里插入age字段才行;而非关系型数据库却不需要这样,非关系型数据库里的记录是一个文档,它是由字段和值对(即键值对)组成的数据结构,你想添加怎样的字段怎样的类型以及数据,只需按键值对的格式(field:value,比如name: “sue”,age: 18,…)输入即可。如果你们想了解关系型数据库和非关系型数据库的详细准确的区别,请自行百度,以上所说的区别只是个人感受,个人理解,如若理解有误,欢迎指正!

二、MongoDB简单说明

       MongoDB —— 是一个对象数据库,没有表、行等概念,也没有固定的模式和结构,所有的数据以文档(Document)的形式存储。(补充说明一下,Document就是一个关联数组式的对象,它的内部由属性组成,一个属性对应的值可能是一个数、字符串、日期、数组,甚至是一个嵌套的文档。)
       集合(Collection) —— 由一组文档(Document)组成,如果将MongoDB中的一个文档比喻成关系型数据库表中的一行,那么一个集合就相当于关系型数据库中的一张表。
       文档(Document) —— 是MongoDB的核心概念,是键值对的一个有序集,在JavaScript里文档被表示成对象。同时它也是MongoDB中数据的基本单元,非常类似于关系型数据库管理系统中的行,但更具表现力。

       总结归纳一下就是,在MongoDB中,多个文档(Document)可以组成集合(Collection),多个集合(Collection)又可以组成数据库。

三、MongoDB详细使用

       这里简单的操作暂且不说,只列一些比较麻烦复杂的操作,有示例说明。

1、更新文档

语法格式:
db.collection.update(
    <query>,
    <update>,
    {
        upsert: <boolean>,
        multi: <boolean>,
        writeConcern: <document>
    }
)
参数说明:
query : update的查询条件,类似sql update查询内where后面的。
update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
writeConcern :可选,抛出异常的级别。

示例1:
       给t_device_type_property集合中的一个文档添加字段unit为空

db.t_device_type_property.update({"_id":ObjectId("605af2a0e5538435819c6241")},{"$set":{"unit":""}})

注:假如以上语句查询出多个符合【"_id":ObjectId(“605af2a0e5538435819c6241”)】的文档,那么MongoDB默认的处理是只给那多个符合的文档里的第一个进行更新,如若想更新所有符合条件的文档,具体操作请看示例2。还有一个需要注意的是,如果进行更新的那条文档里没有unit字段,便会依照【“unit”:""】自动插入unit字段且赋值为空,如果进行更新的那条文档里有unit字段,便会依照【“unit”:""】将unit的值赋值为空,不管原先unit的值是什么,如若想在unit有值的情况下不做修改,具体操作请看示例3


示例2:
       给t_device_type_property集合中的符合条件的所有文档添加字段unit为空

db.t_device_type_property.update({"deviceTypeCode":"DoorSensor"},{"$set":{"unit":""}},false,true)

       update语句第四个参数即是控制更新第一条还是更新所有,默认是false,即更新第一条,所以我们这里只需显式将其置为true即可。


示例3:
       只对t_device_type_property集合中符合条件的但却不存在unit字段的文档进行更新,若符合条件但又存在unit字段的文档则保持不变,不做修改

db.t_device_type_property.update({"deviceId":"6062c83ef7f20a475a82d482","unit":{$exists: false}},{"$set":{"unit":""}},false,true)

       说明: $exists 判断字段是否存在
拓展一下:对t_device_type_property集合中不存在unit字段的文档进行更新,若存在unit字段的文档则保持不变,不做修改

db.t_device_type_property.update({"unit":{$exists: false}},{"$set":{"unit":""}},false,true)

示例4:

       如何在不筛选的情况下对全部文档进行更新?只需要将update语句的第一个参数为空便可以更新全部文档,但这个参数{}不能省略

db.t_device_type_property.update({},{"$set":{"disabled": NumberInt("0")}},false,true)


2、查询文档

       普通的查询这里就不说了,讲一些需要注意的点!
示例1:
       对于NumberLong数据类型的查询,稍微特别一点,在数据库中存储形式是【“houseRoomId” : NumberLong(1372014678461362177)】,如果直接复制上这一段去查询,是查询不到结果的,这种数据类型必须要在NumberLong对象里面加上双引号,才能执行正常查询动作。

db.getCollection('t_device').find({"houseRoomId" : NumberLong("1372014678461362177")})

示例2:
       如若想查询某段时间内的数据,该如何查询?具体命令如下,

db.t_device.find({"createdAt" : {"$gte" : ISODate("2021-05-07T00:00:00Z"), "$lt" : ISODate("2021-05-08T00:00:00Z")}})

       查询结果如下,
在这里插入图片描述



今天先这样,后续有遇到再持续更新!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

雨后天555

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

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

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

打赏作者

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

抵扣说明:

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

余额充值