目录:

  一、MongoDB 简介

  二、MongoDB 安装部署

  三、MongoDB的 增删改查

  四、MongoDB的 数据类型

  五、MongoDB的 $关键字 及 $修改器 $set $inc $push $pull $pop

 

MongoDB:

    启动Mongodb
    mongod --dbpath "数据库目录"
    mongod --dbpath c:/data/db
    默认端口 27017

    show dbs 查看所有存在磁盘上的数据库
    show tables 查看当前数据库存在磁盘上的数据表

    use 数据库 创建数据库或切换数据库

    ######使用了不能存在的对象即创建该对象######

    数据库.表名 创建表

概念:
Mysql:
    id          name        age          duixiang                   hobby
    1        jwb        73        2            2
    2        ywb        84        1            null

MongoDB:
    [
        {
            "id":1,
            "name":"jwb",
            "age":73,
            "hobby":["ywb","lwb"],
            "duixiang":{
                "id":2,
                "name":"ywb",
                "age":84
            }
        },
        {
        
            "id":2,
            "name":"ywb",
            "age":84,
            "duixiang":{
                "id":1,
                "name":"jwb",
                "age":73,
            }
        }
    ]

mysql            mongodb    
数据库             数据库
表            collections
列            Field
row            documents


    
数据增删改查

增加 insert
    #db.user.insert({"id":1,"name":"jwb","age":73})

    官方推荐写法
    db.user.insertMany([{}])
    db.user.insertOne({})

查看 find 
    db.user.find()
    db.user.findOne({})

    并列条件
    db.user.find({"id":2,"age":85}) 

    或条件 $or : 
    db.user.find({$or:[{age:73},{name:"ywb"}]})

    同一个字段的 或条件 $in : 
    db.user.find({age:{$in:[73,84,86]}})

    子集检索 :
    db.user.find({what:{$in:[2,1]}})

    满足所有条件 $all : 
    db.user.find({what:{$all:[2,1,3]}})

    数学比较符:
    $gt : 大于 db.user.find({age:{$gt: 73}})
    $gte: 大于等于
    $lt : 小于
    $lte: 小于等于
    $eq : 等于 
    :也是等于

    "_id" : ObjectId("5c3e84cf1e235402547fa40c")


更新:update 修改器 $set
    #db.user.update({"age":84}, {$set:{"username":"jinjiaodawangba"}})

    官方推荐写法:
    db.user.updateOne({"name":"jwb"},{$set:{"age":99}})
    db.user.updateMany({"name":"jwb"},{$set:{"age":99}})


删除:remove / delete
    #db.user.remove({"age":85})

    官方推荐写法:
    db.user.deleteOne({"name":"jwb"})
    db.user.deleteMany({"name":"jwb"})


$修改器:
    $set : 暴力修改 
    $unset : 暴力删除字段 db.user.updateOne({"name":"ywb"},{$unset:{"hobby":1}})
    $inc : 引用增加 在原有值的基础上增加 db.user.updateMany({},{$inc:{age:1}})

array修改器:
    $push 增加元素 :db.user.updateOne({"name":"ywb"},{$push:{"hobby":"jwb"}})
    $pull 删除元素 :db.user.updateOne({"name":"ywb"},{$pull:{"hobby":"jwb"}})
    $pushAll 迭代增加 :db.user.updateOne({"name":"ywb"},{$pushAll: {"hobby":[1,2,3]}})
    $pop 删除最后一条数据/第一条 :
        最后一条 db.user.updateOne({"name":"ywb"},{$pop:{"hobby":1}})
        第一条 db.user.updateOne({"name":"ywb"},{$pop:{"hobby":-1}})

$ 字符:
    ["hj","tt",1,2] # {"hobby":"hj"} hj 是hobby列表中的第0个元素 就把 0 这个数据放在了 $ 中
    db.user.updateMany({hobby:"hj"},{$set:{"hobby.$":"喝酒"}})
    ###### $ 存储符合条件的元素下标索引 ######

Object操作
    db.user.updateOne({"kecheng.name":"python"},{$set:{"kecheng.price":19800}})
    db.user.updateOne({"kecheng.name":"python"},{$inc:{"kecheng.price":500}})

Array中的Object
    db.user.updateOne({"hobby.age":84},{$set:{"hobby.$.age":73}})

Object中的Array
    db.user.updateOne({"kecheng.class":15},{$set:{"kecheng.class.$":20}})




数据类型:
    ObjectID :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类型,时间戳可以秒杀一切时间类型)



MongoDB中的跳过选取排序:
    skip(5) 跳过五条数据
    limit(5) 只显示五条数据
    分页 skip(5).limit(5)

    sort({age:1})  正序
    sort({age:-1}) 倒序

    如果三个关键字同时出现,优先级:
    1.sort 2.skip 3.limit


pymongo:
    find_one
    insert_one
    insert_many
    update_one
    update_many
    delete_one
    delete_many

    sort("key",1)
概述

 

show dbs
use db1
show tables


# 查找table1前300条数据,且只显示他们的name字段
db.table1.find({}, {'name':1, '_id':0}).limit(300)


创建表:
          db.createCollection('table1')
将一个表的内容复制到另一个表中:
          db.table1.copyTo('table2')
mongodb命令补充

 

一.MongoDB简介

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

MongoDB和关系型数据库最大的区别就是约束性,可以说文件型数据库几乎不存在约束性,理论上没有主外键约束,没有存储的数据类型约束等等

关系型数据库中有一个 "表" 的概念,有 "字段" 的概念,有 "数据条目" 的概念

MongoDB中也同样有以上的概念,但是名称发生了一些变化,严格意义上来说,两者的概念即为相似,但又有些出入

来做一个小例子,进行一个对比

下面我们做一张表:

这是我们用关系型数据库做的一张很简单的User表

接下来我们再看一下MongoDB的数据结构:

这就是个列表,里面放着三个字典,从Python来看可以理解成列表和字典,在其他语言中它又是别的类型了,我们把这种类型叫做:Json

MongoDB的每个表(Collection)中存储的每条数据(Documents)都是一个一个的Json,Json中的每一个字段(Key)我们称之为:Field

就此我们引出了三个关键字,Collection也就是关系型数据库中"表"的概念,Documents就是"数据条目",Field就是"字段"

 

二.MongoDB安装部署

MongoDB的安装

 

安装完成之后,开始进入配置环节,首先我们要进入目录:

"C:\Program Files\MongoDB\Server\3.4\bin"

配置环境变量:

之后的操作,windows 7 与 windows 10 不太一样,大同小异

windows 10 一路到底的"确定"

windows 7 在这里需要注意的是,Path路径移动到最后,输入:"  ;C:\Program Files\MongoDB\Server\3.4\bin  " 一定要带上 "  ;  " 

打开cmd窗口进行一次操作

那我们来创建一个" C:\data\db\ "的目录

好了目录已经有了,再试一下

好了开启成功了

那么服务开启了,客户端怎么去连接呢,这时我们需要另一个cmd窗口开启mongo的客户端

到此,我们成功的完成了,服务端的部署开启,还有客户端的链接,

千万别把这两个cmd窗口关了,不然你还得重新打开一次

将MongoDB制成Windows服务 :

1.创建配置文件:在mongodb安装的路径下创建配置文件mongod.cfg(路径和名称可以和此处不一样),然后在配置文件中添加以下代码:

logpath=E:\mongodb\data\log\mongod.log
dbpath=E:\mongodb\data\db

  logpath是日志路径,dbpath是MongoDB数据库的存储路径

2.安装mongodb服务:在cmd中输入以下代码即可

mongod --config "cfg配置文件所在路径" --install
如:  mongod --config "E:\mongodb\mongod.cfg" --install

3.启动和关闭mongodb的命令:

启动mongodb: net start mongodb
关闭mongodb: net stop mongodb

4.移除mongodb服务的命令:

"E:\mongodb\bin\mongod.exe" --remove

 

 

三、MongoDB的增删改查

1、.MongoDB操作 之 原生ORM,根本不存在SQL语句

创建数据库:这里和一般的关系型数据库一样,都要先建立一个自己的数据库空间

MongoDB设计的比较随意,没有就认为你是在创建,use LuffyCity_Com是不存在的,所以MongoDB就认为你是要创建并使用

这个概念一定要记清楚,MongoDB中如果你使用了不存在的对象,那么就等于你在创建这个对象

使用了不存在的对象,就代表创建对象,我们使用这一谬论创建一张表(Collection)试试

成功的创建了一个Oldboy的Collection

2、MongoDB 之 插入数据(insert     insertOne     insertMany)

insert:插入一条或者多条数据,需要带有允许插入多条的参数,这个方法目前官方已经不推荐喽

db.Oldboy.insert({"name":"DragonFire","age":20})

insertOne: 插入一条数据,官方推荐

我们可以看出来两种方法的返回值截然不同

insertMany:插入多条数据,无需参数控制,官方推荐

这就是我们向LuffyCity_Com.Oldboy中插入了多条数据:

[{
  "name":"DragonFire",
  "age":20    
},
{
 "name":"WuSir",
 "age":19
}]

3、MongoDB  之  查询数据(find findOne)

注意:这里没有findMany

find() 无条件查找:将该表(Collection)中所有的数据一次性返回

db.Oldboy.find({name:"WuSir2b"}) 条件查找:name等于WuSir2b的数据,这里会返回多条结果

MongoDB自动给我们添加到系统唯一标识"_id" 是一个ObjectId 类型

findOne()无条件查找一条数据,默认当前Collection中的第一条数据

findOne({age:19}) : 条件查找一条age等于19的数据,如有多条数据则返回更靠前的数据

4、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改为pig_qi

$set:{"name":"WSSB"}中: $set 是update时的关键字,表示我要设置name属性的值为"WSSB"

那么我们之前说过MongoDB的灵活性,没有就代表我要创建,所以说如果该条Documents没有name属性,他就会自动创建一个name属性并且赋值为"WSSB"

5、.MongoDB  之  删除数据(remove) 

remove({}):无条件删除数据,这里要注意了,这是删除所有数据,清空Collection

 

remove({"name":"DragonFire"}) : 条件删除name等于"DragonFire"的所有Document

 

四、MongoDB的数据类型

https://www.cnblogs.com/xuzhaocai/p/8048177.html

MongoDB中的数据类型:

ObjectID :Documents 自生成的 _id

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

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

Integer:整数 (Int32 Int64 一般我们用Int32)

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

Arrays:数组或者列表,多个值存储到一个键 (相当于Python中的List)

Object:相当于Python中的字典,这个数据类型就是字典

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

Timestamp:时间戳

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

看着挺多的,但是真要是用的话,没那么复杂,很简单的

MongoDB 之 剖析MongoDB的数据类型

1.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 :

UTF-8字符串,记住是UTF-8字符串

3.Boolean :

true or false 这里首字母是小写的

4.Integer :

整数 (Int32 Int64 一般我们用Int32)

5.Double :

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

6.Arrays :

{
    "_id" : ObjectId("5b163830993ddc4cd4918ead"),
    "name" : "LuffyCity",
    "teacher" : [
        "DragonFire",
        "WuSir2B",
        "Alex AGod"
    ]
}

数组或者列表,多个值存储到一个键

7.Object :

{
    "_id" : ObjectId("5b163915993ddc4cd4918eaf"),
    "name" : "LuffyCity",
    "course" : {
        "name" : "Python",
        "price" : 19800
    }
}

相当于Python中的字典,这个数据类型就是字典

8.Null :

{
    "_id" : ObjectId("5b163a0e993ddc4cd4918eb0"),
    "name" : "LuffyCity",
    "course" : null
}

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

9.Timestamp :时间戳

{
    "_id" : ObjectId("5b163bbf993ddc4cd4918eb3"),
    "name" : "LuffyCity",
    "date" : 1528183743111
}

10.Date :

 

{
    "_id" : ObjectId("5b163ba1993ddc4cd4918eb2"),
    "name" : "LuffyCity",
    "date" : ISODate("2018-06-05T15:28:33.705+08:00")
}

 存储当前日期或时间格式 (我们一般很少使用这个Date类型,因为时间戳可以秒杀一切时间类型)

 

五、MongoDB 的 $关键字 及 $修改器 $set $inc $push $pull $pop

MongoDB中的关键字有很多, $lt $gt $lte $gte 等等,这么多我们也不方便记,这里说说几个比较常见的

1.查询中常见的 等于 大于 小于 大于等于 小于等于

等于 : 在MongoDB中什么字段等于什么值其实就是 " : " 来搞定 比如 "name" : "路飞学城"

大于 : 在MongoDB中的 大于 > 号 我们用 : $gt  比如 :  "score" : { $gt : 80 } 就是 得到 "score" 大于 80 的数据

小于 : 在MongoDB中的 小于 < 号 我们用 : $lt  比如 :  "score" : { $lt : 80 } 就是 得到 "score" 小于 80 的数据

大于等于 : 在MongoDB中的 大于等于 >= 号 我们用 : $gte  比如 :  "score" : { $gte : 80 } 就是 得到 "score" 大于等于 80 的数据

小于等于 : 在MongoDB中的 小于等于 <= 号 我们用 : $lte  比如 :  "score" : { $lte : 80 } 就是 得到 "score" 小于等于 80 的数据

这就是MongoDB中的运算符,类似于我们使用的ORM中的运算符

2.MongoDB中的那些update修改器: $inc $set $unset $push $pull

在此前的update中,我们用过$set,对数据进行过更新,其实在update中还存在很多的$关键字,我们把update中的这些关键字叫做 修改器

修改器很多,这里挑一些重要的来说一说:

(1).$inc : Python中的  变量 += 1 , 将查询到的结果 加上某一个值 然后保存

还是刚才Collection数据,我们来试一下$inc , 让不及格的 "路飞学城2" 变成 60 分

成功了 , {$inc:{"score":1}}的意思是,"score"的原有数值上面 +1,那我们再来实验一次,把60改为20,这怎么操作呢,其实可以理解为在 60 上加一个 -40

又成功了

$inc 的用法就是原有基础上在增加多少

(2).$set : 前面我们已经提到过 $set 的用法和特性(没有就自动添加一条)了

再做一个例子:把 "score" 为 100 分 的 "english_name" 赋值为 "LuffyCity"

再把 "score" 为 20 分的 "score" 赋值为 59 分

(3).$unset : 用来删除Key(field)的

做一个小例子 : 刚才我们有一个新的"english_name" 这个field ,现在我们来删除它

成功了! {$unset:{"english_name" : 1}} 就是删除 "english_name" 这个 field 相当于 关系型数据库中删除了 字段

(4). $push : 它是用来对Array (list)数据类型进行 增加 新元素的,相当于Python中 list.append() 方法

做一个小例子 :首先我们要先对原有数据增加一个Array类型的field:

使用update $set 的方法只能为Document中的第一条添加

使用updateMany $set 的方法 可以为所有满足条件的 Document 添加 "test_list" , 注意我这里的条件为空 " {} " 就算是为空,也要写上"{}" 

接下来我们就要队列表进行添加了: 将 "score" 为 100 的Document 中"test_list" 添加一个 6

$push 是在 Array(list) 的尾端加入一个新的元素  {$push : {"test_list" : 6}}

(5).$pull : 有了$push 对Array类型进行增加,就一定有办法对其内部进行删减,$pull 就是指定删除Array中的某一个元素

做一个例子: 把我们刚才$push进去的 6 删除掉

问题来了,如果 Array 数据类型中 如果有 多个 6 怎么办呢?

全部删掉了.....

得出了一个结论,只要满足条件,就会将Array中所有满足条件的数据全部清除掉

(6). $pop : 指定删除Array中的第一个 或 最后一个 元素

做个小例子: 删除"score" 等于 100 分  test_list 的最后一个元素

怎么删除第一个呢?

{$pop:{"test_list" : -1}}  -1 代表最前面, 1 代表最后边 (这和Python正好相反) 

posted on 2019-12-26 13:50  始终不够啊  阅读(255)  评论(0编辑  收藏  举报