MongoDB入门教程

  1. 介绍

MongoDB是一个NoSQL数据库,它是跨平台的,基于分布式文件存储的数据库,由C++语言编写的(这点很重要,则表示在Linux下需要安装gcc环境)。MongoDB是以文档的形式存储数据,数据结构由键值(key:value)对组成,类似JSON

MongoDB结构,最小的单位为文档(类似MySQL的行),每一个文档用的是BSON形式来存储(类似JSON),文档的上一层为集合(类似MySQL的表),再上一级为(类似MySQL的数据库)。

MongoDB

  1. 指令操作

    • 库级别的指令

    show dbs 查看数据库,会显示当前的数据库,以及占用的内存大小 。

    注意 : 该命令不会显示空的数据库。

    db 查看当前用户连接的是哪个库。

    use db_name use命令有两个作用,一个是切换库,如果这个库不存在还会创建库。

    db.dropDatabase() 删除当前所在的数据库。

    • 集合级别的指令

    需要注意的是,在集合中,可以随意存储任何想干或者不想干的数据,并不像关系型数据库中已经定死了这个列必须是什么值,存放的数据可以比较随意。

     db.createCollection("user",{size:20,capped:true,autolndexld:true,max:50})

    { "ok" : 1 }
    在当前库下创建了一个集合,该集合自动添加索引,并且该集合为固定长度,20字节,集合中最多包包含50个文档。

    db.createCollection(name,option),其中option是一个json格式,可选参数以及信息如下。

    | 字段 | 类型 | 描述 |
    | :---------------- | ---- | :----------------------------------------------------------- |
    | capped(可选) | 布尔 | 如果为true,则创建固定集合,固定集合是指有大小的集合,当达到最大值的时候,他会覆盖最早的文档。
    当该字段为true时,必须指定size参数 |
    | autoIndexId(可选) | 布尔 | 如果为true,自动在_id字段创建索引,默认为false。 |
    | size(可选) | 布尔 | 为固定集合指定一个最大值(以字节计算)。
    如果capped为true,也需要指定该字段 |
    | max(可选) | 布尔 | 指定固定集合中包含文档的最大数量。 |

    show collections 显示当前库下的所有集合

    db.printCollectionStats() 会显示当前库下集合的创建信息

    db.user.drop() 删除当前库下的user集合

    • 文档级别的指令
    db.student.insert({"name":"simon","school":"tssy","numbe":123456})

    插入一条文档,我并没有创建集合student,直接写插入语句,如果表不存在会自动创建(一般都是使用此方式来建表,而不是去用createColletion()创建表,此方式的容量会自动增长。)

    db.student.insert({"class":161,"number":123456,"teach":"xuye"})

    在插入一条文档,可以发现,两条文档之间的格式要求是没有任何关系的,甚至你可以随便插入不是关于学生此类的信息都可以,但是一般一个表只插入一类信息的文档(约定成俗的)。

    db.student.find()

    查看该集合中所有的文档。

    注:我们并没有插入_id这个东西,这是mongodb自动帮我们生成的一个id,是唯一的,所以也就不需要我们去生成id了。

    db.student.find().pretty()

    格式化显示查询的语句,类似代码的格式化,看上去好看一些。

    db.student.insert({"name":"simon","number":123456,"deskmate":{"name":"qi","number":123}})

    插入一条复杂一些的文档,可以嵌套,和json一样,只要符合键值对的形式都可以使用。如果多个嵌套的话,要使用中括号,如下。

    db.student.insert({"name":"simon","number":1234,"deskmate":[{"name":"Q","number":1111},
    {"name":"S","number":"2222"}]})
    • 分页查询
    db.books.insert({"name":"html","price":20.01})
    db.books.insert({"name":"css","price":19.99})
    db.books.insert({"name":"js","price":67.84})
    db.books.insert({"name":"linux","price":289.78})
    db.books.insert({"name":"node","price":29.78})
    db.books.insert({"name":"vue","price":157.68})

    先插入一些数据,书名和书的价格。

    db.books.find()

    查看数据,下面进行分页。

    db.books.find().skip(0).limit(3)

    分页查询,表示查到的数据,从第一条开始,显示3条。类似SQL的limit 0,3。也可以记为,跳过0条,显示3条。

    skip(0).limit(3)这两个的位置是可以颠倒的

    • 带条件查询
     db.books.find({"name":"node"})

    查询name为node的书籍,在find函数的里面加上json格式的条件即可。

    db.books.find({"name":"node","price":29.78})

    多条件查询,使用逗号分隔即可,

    类似select * form books where name="node" and price=29.78

    db.books.find({$or:[{"name":"node"},{"name":"js"}]})

    查询nam为node或者js的书籍,格式为find({$or : [{},{}]}) 中括号里面填写每一个json格式的条件

    类似select * form books where name="spring" or name="java"

    db.books.find({"price":{$gte : 100}})

    查询价格大于等于100的书籍。

    db.books.find({"price":{$lte : 20}})

    查询价格小于等于20的书籍。

    b.books.find({"price":{$gte:100,$lte:200}})

    查询价格大于等于100并且小于等于200的书籍。

    db.books.find({$or:[{"price":{$gt:200}},{"price":{$lt:20}}]})

    查询价格大于200或者价格小于20的书籍,or的操作有点另类,一定要写在一开始的key上

    注意:gt为大于,gte为大于等于,lt为小于,lte为小于等于。

    查询的指令很多,为了看起来更加清晰,将去重及正则放在下面。

    db.books.insert({"name":"node","price":22.05})

    先插入一条name同为spring的文档

    db.books.distinct("name")

    根据name去重,类似select distinct name from books

    db.books.distinct("name",{"price":{$lt:30}})

    查询出价格小于30的书籍,然后根据name去重

    distinct命令和find类似,只不过多了一个去重功能

    db.books.find({"name":/vue/})

    使用正则表达式查询

    db.books.find({},{"price":1})

    只显示price列,格式find({},{key1:1,key2:1}),第一个{}表示查询的条件,第二个为显示的列信息,多个用逗号隔开

    db.books.find({},{"price":1}).sort({"price":1})

    查询后只显示price列,并且按照价格升序

    db.books.find({},{"price":1}).sort({"price":-1})

    与上面相反,按价格降序。

    db.books.find().count()

    返回查询结果的总记录数。

    • 修改和删除
    db.books.update({"name":"html"},{$set:{"name":"mongodb","price":50.01}})

    把name为java的这条数据更新为name=javase和price=50.01。格式update({},{}),第一个{}为要更改的数据,第二个为要修改为什么数据。
    注意,如果存在多个name为java的则只修改一个,下面看如何更新多个。之前我们存在名为spring的书籍有两本。现在把这两本价格都修改为50.

    db.books.remove({"name":"css"})

    删除name为css的书籍,默认是存在多少个就删除多少个

    db.books.remove({})

    删除当前集合的所有数据,不要乱用

分享到此结束,新年快乐

Last modification:January 21st, 2020 at 09:38 am
来杯coffee吧