美文网首页
MongoDB 学习 2018-10-17

MongoDB 学习 2018-10-17

作者: Mr_Du_Biao | 来源:发表于2018-10-17 19:56 被阅读0次

MongoDB的介绍

  • MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
  • MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

一、MongoDB 与sql的区别

  • 它和我们使用的关系型数据库最大的区别就是约束性 ,可以说文件型数据库几乎不存在约束性,理论上没有主外键约束,没有存储的数据类型约束等等
  • 关系型数据库中有一个 “表“的概念,有 “字段“的概念,有 "数据条目" 的概念。MongoDB中也同样有以上的概念,但是名称发生了一些变化,严格意义上来说,两者的概念即为相似,但又有些出入,不过无所谓,我们就当是以上概念就好啦
  • 下面我们用关系型数据库做的一张很简单的User表: image.png
  • 接下来我们再看一下MongoDB的数据结构: image.png
  • 那么你就该恍然大悟了吧,MongoDB的每个表(Collection)中存储的每条数据(Documents)都是一个一个的Json,Json中的每一个字段(Key)我们称之为:Field
  • 就此我们引出了三个关键字,Collection也就是关系型数据库中"表"的概念,Documents就是"数据条目"就是“行”,Field就是"字段"

二、MongoDB安装部署

三、使用MongoDB

  • 首先要先牢记MongoDB中一个重要的概念:MongoDB中如果你使用了不存在的对象,那么就等于你在创建这个对象哦
1、use LuffyCity 创建并使用数据库
2、db 显示当前使用的数据库
image.png
3、db.Oldboy 创建并使用表(Colletion)
4、exit 退出数据库
5、插入数据
    1. insert:插入一条或者多条数据,需要带有允许插入多条的参数,这个方法目前官方已经不推荐 image.png
    • __solts__ = ["usename","pwd"] 限制插入的必须有这两个字段
  • 2、insertOne: 插入一条数据,官方推荐 image.png
  • 3、insertMany:插入多条数据,无需参数控制,官方推荐 image.png
6、查询数据
  • 注意:
    • 这里不是select,如果你的第一反应是select 证明你关系型数据库没白学
    • 这里没有findMany
  • 1、find() 无条件查找:将该表(Collection)中所有的数据一次性返回 image.png
    • db.Oldboy.find({name:"WuSir2b"}) 条件查找:name等于WuSir2b的数据
    • 其中"_id":ObjectId("乱七八糟一道对看着毫无关系的一对字符串")就是MongoDB自动给我们添加到系统唯一标识"_id" 是一个ObjectId
  • 2、findOne()
    • findOne()无条件查找一条数据,默认当前Collection中的第一条数据 image.png
    • findOne({age:19}) : 条件查找一条age等于19的数据,如有多条数据则返回更靠前的数据
    • find({条件,条件}) 相当于and
    • find({$or:[{name:jin},{age:{$lt:50}}]})相当于or
7、修改数据
  • 1、update update({"name":"DragonFire"},{$set:{"age":21}}):根据条件修改该条数据的内容,官方不推荐
    • 把name等于DragonFire中的age改为21,这里要注意的是({"条件"},{"关键字":{"修改内容"}}),其中如果条件为空,那么将会修改Collection中所有的数据 image.png
    • updateOne*({"age":19},{$set:{"name":"WSSB"}}):根据条件修改一条数据的内容,如出现多条,只修改最高前的数据,把age等于19的所有数据中第一条数据的name改为WSSB image.png
    • updateMany({"age":19},{$set:{"name":"pig_qi"}}):根据条件修改所有数据的内容,多条修改,把age等于19的所有数据中的name改为WSSB image.png
    • 注意:
      • 解释一下: $set 是update时的关键字,表示我要设置name属性的值为"WSSB"
      • 如果该条Documents没有name属性,他就会自动创建一个name属性并且赋值为"WSSB"
8、删除数据
  • 1、remove({}):无条件删除数据,这里要注意了,这是删除所有数据,清空Collection 官方不推荐 image.png
  • 2、remove({"name":"DragonFire"}) :条件删除name等于"DragonFire"的所有Document image.png
    • 官方推荐写法:
      • deleteOne({})
      • deleteMany({})

四、MongoDB 数据类型

  • 1、数据类型
    • Object ID :Documents 自生成的 _id

    • String: 字符串,必须是utf-8

    • Boolean:布尔值,true 或者false (这里有坑哦~在我们大Python中 True False 首字母大写)

    • Integer:整数 (Int32 Int64 你们就知道有个Int就行了,一般我们用Int32)

    • Double:浮点数 (没有float类型,所有小数都是Double)

    • Arrays:数组或者列表,多个值存储到一个键 (list哦,大Python中的List哦)

    • Object:如果你学过Python的话,那么这个概念特别好理解,就是Python中的字典,这个数据类型就是字典

    • Null:空数据类型 , 一个特殊的概念,None Null

    • Timestamp:时间戳

    • Date:存储当前日期或时间unix时间格式 (我们一般不用这个Date类型,时间戳可以秒杀一切时间类型)

  • 2、MongoDB的数据类型详解
    • 1.Object ID :
      image.png
    • ObjectId("时间戳+机器码+线程进程ID+计数器"):不能被json
    • 想要能json需要先转换成字符串
data =  {"username":"jinwangba","user_id":ObjectId("5bc6b21ef7ac9a09b4ff6c0e")}
data["user_id"] = str(data["user_id"])
print(json.dumps(data))
  • 想要字符串转换成ObjectId类型
objid = "5bc6b21ef7ac9a09b4ff6c0e"

print(objid,type(objid))   # 字符串类型

print(ObjectId(objid),type(ObjectId(objid)))  # ObjectId(objid)转换成ObjectId类型
"_id" : ObjectId("5b151f8536409809ab2e6b26")

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

#注意:这个类型是不可以被JSON序列化的
  • 这是MongoDB生成的类似关系型DB表主键的唯一key,具体由24个字节组成:
    • 0-8字节是时间戳,

    • 9-14字节的机器标识符,表示MongoDB实例所在机器的不同;

    • 15-18字节的进程id,表示相同机器的不同MongoDB进程。

    • 19-24字节是计数器

  • 2.String :
    image.png
    • UTF-8字符串,记住是UTF-8字符串
  • 3.Boolean : image.png
    • true or false 这里首字母是小写
  • 4.Integer整数 image.png
    • 整数 (Int32 Int64 你们就知道有个Int就行了,一般我们用Int32)
  • 5.Double : image.png
    • 浮点数 (MongoDB中没有float类型,所有小数都是Double)
  • 6.Arrays : image.png
{
    "_id" : ObjectId("5b163830993ddc4cd4918ead"),
    "name" : "LuffyCity",
    "teacher" : [
        "DragonFire",
        "WuSir2B",
        "Alex AGod"
    ]
}
 数组或者列表,多个值存储到一个键 (list哦,大Python中的List哦
  • 7.Object : image.png
{
    "_id" : ObjectId("5b163915993ddc4cd4918eaf"),
    "name" : "LuffyCity",
    "course" : {
        "name" : "Python",
        "price" : 19800
    }
}
  + 如果你学过Python的话,那么这个概念特别好理解,就是Python中的字典,这个数据类型就是字典
  • 8.Null :空数据类型 , 一个特殊的概念,None Null image.png
{
    "_id" : ObjectId("5b163a0e993ddc4cd4918eb0"),
    "name" : "LuffyCity",
    "course" : null
}
  • 9.Timestamp :时间戳 image.png
{
    "_id" : ObjectId("5b163bbf993ddc4cd4918eb3"),
    "name" : "LuffyCity",
    "date" : 1528183743111
}
  • 10.Date : image.png
{
    "_id" : ObjectId("5b163ba1993ddc4cd4918eb2"),
    "name" : "LuffyCity",
    "date" : ISODate("2018-06-05T15:28:33.705+08:00")
}

相关文章

  • MongoDB 学习 2018-10-17

    MongoDB的介绍 MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用...

  • 小结

    To Do List mongoDB数据库学习 vertX框架学习 案例整理 mongoDB 这部分学习分为五块:...

  • MongoDB文档

    MongoDB文档 MongoDB 概念解析 不管我们学习什么数据库都应该学习其中的基础概念,在mongodb中基...

  • 24.Mongodb的索引操作

    Mongodb的索引操作 学习目标 掌握 mongodb索引的创建,删除操作 掌握 mongodb查看索引的方法 ...

  • 肺科  医技大楼项目 10-17 工地进展

    2018-10-17 阴雨 截止2018-10-17 项目部管理人员15人, 作业班组: 锚锁班组 6人,两台锚...

  • MongoDB 与 MySQL 对比

    MongoDB 与 MySQL 对比 由于公司系统使用MongoDB,虽然之前了解,但并没有深入学习MongoDB...

  • 22.Mongodb的的增删改查

    Mongodb的的增删改查 学习目标 掌握 mongodb插入数据的方法 掌握 mongodb保存数据的方法 掌握...

  • mongoose官方文档学习

    一.mongodb学习准备 1.1First be sure you have MongoDB and Node....

  • MongoDB教程

    前言:相关学习网站 -- http://www.runoob.com/mongodb/mongodb-tutori...

  • Mongodb常用语法

    关于Mongodb的全面总结,学习mongodb的人,可以从这里开始! Mongodb集群搭建的三种方式 Mong...

网友评论

      本文标题:MongoDB 学习 2018-10-17

      本文链接:https://www.haomeiwen.com/subject/ghjrzftx.html