MongoDB基础操作

开启数据库服务

  • MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
  • MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
  • 它和关系型数据库最大的区别就是约束性,可以说文件型数据库几乎不存在约束性,理论上没有主外键约束,没有存储的数据类型约束等等
  • MongoDB的每个表(Collection)中存储的每条数据(Documents)都是一个一个的Json,Json中的每一个字段(Key)称之为:Field
  • 安装完成之后,开始进入配置环节,首先要进入目录: "C:\Program Files\MongoDB\Server\3.4\bin" 其中mongo.exe是客户端,mongod.exe是服务端
  • 配置环境变量
  • 打开cmd窗口: mongod 开启数据库服务
  • 没有发现Data的存放目录,需要手动建立一个" C:\data\db\ "的目录 mkdir C:\data\db 创建目录

MongoDB的增删改查

  • MongoDB操作 之 原生ORM,根本不存在SQL语句
  • 创建数据库:这里和一般的关系型数据库一样,都要先建立一个自己的数据库空间
  • MongoDB设计的比较随意,没有就认为是在创建,use LuffyCity_Com是不存在的,所以MongoDB就认为是要创建并使用 MongoDB中如果使用了不存在的对象,那么就等于在创建这个对象

  • MongoDB 之 插入数据(insert insertOne insertMany)
  • insert:插入一条或者多条数据,需要带有允许插入多条的参数,这个方法目前官方已经不推荐喽
  • insertOne: 插入一条数据,官方推荐
  • insertMany:插入多条数据,无需参数控制,官方推荐

  • MongoDB 之 删除数据(remove)
  • remove({}):无条件删除数据,这里要注意了,这是删除所有数据,清空Collection
  • remove({"name":"DragonFire"}) : 条件删除name等于"DragonFire"的所有Document

  • MongoDB 之 修改数据(update updateOne updateMany) 之 跟insert一样,不推荐update的写法
  • update({"name":"DragonFire"},{$set:{"age":21}}):根据条件修改该条数据的内容
  • 把name等于DragonFire中的age改为21,这里要注意的是({"条件"},{"关键字":{"修改内容"}}),其中如果条件为空,那么将会修改Collection中所有的数据
  • updateOne({"age":19},{$set:{"name":"WSSB"}}):根据条件修改一条数据的内容,如出现多条,只修改最高前的数据 把age等于19的所有数据中第一条数据的name改为WSSB
  • updateMany({"age":19},{$set:{"name":"pig_qi"}}):根据条件修改所有数据的内容,多条修改 把age等于19的所有数据中的name改为WSSB
  • $set:{"name":"WSSB"} $set 是update时的关键字,表示要设置name属性的值为"WSSB"
  • MongoDB的灵活性,没有就代表要创建,所以说如果该条Documents没有name属性,他就会自动创建一个name属性并且赋值为"WSSB"

  • MongoDB 之 查询数据(find findOne) 之 这里没有findMany
  • find() 无条件查找:将该表(Collection)中所有的数据一次性返回
  • db.Oldboy.find({name:"WuSir2b"}) 条件查找:name等于WuSir2b的数据,这里可能会返回多条结果
  • MongoDB自动给我们添加到系统唯一标识"_id" 是一个ObjectId 类型
  • findOne()无条件查找一条数据,默认当前Collection中的第一条数据
  • findOne({age:19}) : 条件查找一条age等于19的数据,如有多条数据则返回更靠前的数据

mongoDB之数据类型

  • Object ID :Documents 自生成的 _id
  • String: 字符串,必须是utf-8
  • Boolean:布尔值,true 或者false (在Python中 True False 首字母大写)
  • Integer:整数 (Int32 Int64 知道有个Int就行了,一般用Int32)
  • Double:浮点数 (没有float类型,所有小数都是Double)
  • Arrays:数组或者列表,多个值存储到一个键 (Python中的List)
  • Object:(Python中的字典)
  • Null:空数据类型 , 一个特殊的概念,None Null
  • Timestamp:时间戳
  • Date:存储当前日期或时间unix时间格式 (一般不用这个Date类型,时间戳可以秒杀一切时间类型)
这是MongoDB生成的类似关系型DB表主键的唯一key,具体由24个字节组成:
0-8字节是时间戳,
9-14字节的机器标识符,表示MongoDB实例所在机器的不同;
15-18字节的进程id,表示相同机器的不同MongoDB进程。
19-24字节是计数器

"_id" : ObjectId("5b151f8536409809ab2e6b26")
#"5b151f85" 代指的是时间戳,这条数据的产生时间
#"364098" 代指某台机器的机器码,存储这条数据时的机器编号
#"09ab" 代指进程ID,多进程存储数据的时候,非常有用的
#"2e6b26" 代指计数器,这里要注意的是,计数器的数字可能会出现重复,不是唯一的
#以上四种标识符拼凑成世界上唯一的ObjectID
#只要是支持MongoDB的语言,都会有一个或多个方法,对ObjectID进行转换
#可以得到以上四种信息

#注意:这个类型是不可以被JSON序列化的
Object ID

MongoDB 之 $关键字 及 $修改器

  • MongoDB中的运算符:$lt小于 $gt大于 $lte小于等于 $gte大于等于
  • MongoDB中的那些个update修改器: $inc $set $unset $push $pull $pop
  • 在此前的update中,我们用过$set,对数据进行过更新,其实在update中还存在很多的$关键字,我们把update中的这些关键字叫做修改器
  • $inc : Python中的 变量 += 1 , 将查询到的结果 加上某一个值 然后保存
  • {$inc:{"score":1}}的意思是,"score"的原有数值上面 +1,怎么把60改为20,其实可以理解为在 60 上加一个 -40
  • $set : 此前我们已经提到过 $set 的用法和特性(没有就自动添加一条)了
  • $unset : 用来删除Key(field)的, {$unset:{"english_name" : 1}} 就是删除 "english_name" 这个 field 相当于关系型数据库中删除了字段
  • $push : 它是用来对Array (list)数据类型尾端进行增加新元素的,相当于Python中list.append()方法
  • 使用update $set 的方法只能为Document中的第一条添加
  • 使用updateMany $set 的方法 可以为所有满足条件的 Document 添加 "test_list" , 注意我这里的条件为空 " {} " 就算是为空,也要写上"{}"
  • $pull : 有了$push 对Array类型进行增加,就一定有办法对其内部进行删减,$pull 就是指定删除Array中的某一个元素,只要满足条件,就会将Array中所有满足条件的数据全部清除掉
  • $pop : 指定删除Array中的第一个 或 最后一个 元素,{$pop:{"test_list" : -1}} -1 代表最前面, 1 代表最后边 (这和Python正好相反)

MongoDB 之 "$" 的奇妙用法

  • "$" 在 update 中 加上关键字 就 变成了 修改器
  • 其实 "$" 字符 独立出现也是有意义的 , 起名叫做代指符
  • {$set :{"test_list.0" : 9}} 这样就是对应 Array 中的下标进行修改了 "test_list.下标"
  • $ 字符 在语句中代表了下标,位置,使用 update的话, 满足条件的数据下标位置就会传递到 $ 字符中,在更新操作的时候就相当于对这个位置的元素进行操作

MongoDB 之 Array Object 的特殊操作

  • 把price 中 19000 改为 19300,db.Oldboy.update({"name":"路飞学城-骑士计划"},{$set:{"price.2":19300}})
  • 把 price 小于 19500 的 自动补上 200,$ 这个只储存一个下标
  • db.Oldboy.update({"name":"路飞学城-骑士计划"},{$set:{"other.count":199}}) 对了就是在这个对象 打点儿 key 就可以更改数值了 , 要注意的是, 咱们用的 $set 进行修改的,那么就意味着,如果没有"other.count"这个field的话,他会自动创建
  • Array + Object 的用法

把count 大于 175 的field 加 15

  • db.Oldboy.update({"price.count":{$gt:175}},{$inc:{"price.$.count":15}})
  • 分析一下代码:
  • {"price.count":{$gt:175}}, price 明明是个 Array 啊 怎么就直接 打点儿 count 了呢 这里要知道price 打点儿 就是从内部的Object 中找到 count 小于 175 的结果
  • {$inc:{"price.$.count":15}} , 这里就比较好理解了,price里面第 $ (大于175的第一个) 个元素中 count 增加 15

把 count 大于 180 的 start 改为 "2018年8月10日"

MongoDB 之 Limit 选取 Skip 跳过 Sort 排序

  • Limit 选取 : 从 Document 中取出多少个
  • Skip 跳过 : 跳过多少个Document
  • Limit + Skip : 从这儿到那儿 的 选取
  • Sort 排序 : 将结果按照关键字排序,1 为升序 , -1 为降序
  • Sort + Skip + Limit 是有执行优先级的 他们的界别分别是 优先 Sort 其次 Skip 最后 Limt Skip + Limit 的优先级 也是先 Skip 再 Limit

转载于:https://www.cnblogs.com/bubu99/p/11386498.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值