• MongoDB存储基础教程


    一、MongoDB简介

      1. mangodb是一种基于分布式、文件存储的非关系型数据库
      2. C++写的,性能高
      3. 为web应用提供可扩展的高性能数据存储解决方案
      4. 所支持的格式是json格式

    二、MongoDB三元素&和关系型数据库的区别

      三元素:数据库  集合(类似关系型数据库的表)  文档(类似关系型数据库中的行)

      文档:就是一个对象,由键值对构成{"name":"zhangsan","age":33}

      集合:类似于数据库中的表,储存多个文档,结构不固定
        {"name":"zhangsan","age":33}
        {"name":"zhangsan","age":33}
        {"book":"python","price":33}
      数据库:是一个集合的物理容器,一个数据库可以包含多个文档

    SQL术语/概念MongoDB术语/概念解释/说明
    database database 数据库
    table collection 数据库表/集合
    row document 数据记录行/文档
    column field 数据字段/域
    index index 索引
    table joins   表连接,MongoDB不支持
    primary key primary key 主键,MongoDB自动将_id字段设置为主键

    三、MongoDB自带的数据库

    admin: 从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。
    local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
    config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。
    test:MongoDB的默认数据库是test。 如果没有创建任何数据库,那么集合将被保存在测试数据库。

    四、MongoDB数据库命令

      mongod 开启服务器
      mongo 开启客户端


      show dbs 显示所有数据库列表
      db 显示当前数据库对象/集合
      use 连接到一个指定的数据库;如果数据库不存在,会被创建。
      db.dropDatabase() 删除选定的数据库

      注意:show dbs要显示数据库,需要插入一个文档进去。

    五、集合(表)的创建

      MongoDB中使用db.createCollection(name,option)用来创建集合
        name 是要创建集合的名称。
        option 用于指定集合的配置,(可选)指定有关内存大小和索引选项

      db.createCollection("myconllection") 创建集合
      show collections 检查创建的集合
      db.COLLECTION_NAME.drop() 删除集合 : db.myconllection.drop()

      在MongoDB中可以不创建集合,当插入一些文档的时候MongoDB会自动创建集合。

    六、文档(一行记录)

      文档是一组键值对。MongoDB不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大区别,也是MongoDB的特点。

      文档中的键/值对是有序的。
      文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)。
      MongoDB区分类型和大小写。
      MongoDB的文档不能有重复的键。
      文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。

    七、MongoDB中的数据类型

    数据类型描述
    String 字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。
    Integer 整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。
    Boolean 布尔值。用于存储布尔值(真/假)。
    Double 双精度浮点值。用于存储浮点值。
    Min/Max keys 将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。
    Array 用于将数组或列表或多个值存储为一个键。
    Timestamp 时间戳。记录文档修改或添加的具体时间。
    Object 用于内嵌文档。
    Null 用于创建空值。
    Symbol 符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。
    Date 日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。
    Object ID 对象 ID。用于创建文档的 ID。
    Binary Data 二进制数据。用于存储二进制数据。
    Code 代码类型。用于在文档中存储 JavaScript 代码。
    Regular expression 正则表达式类型。用于存储正则表达式。

    八、文档的插入

    MongoDB中使用insert()和save()方法向集合中插入文档,语法如下:

    db.collection_name.insert()
    
    db.mycol.insert({
           _id: 1,
           title: 'MongoDB Overview',
           description: 'MongoDB is no sql database',
           by: 'weiheng',
           url: 'http://www.weiheng.site',
           tags: ['mongodb', 'database', 'NoSQL'],
           likes: 1,
     })

    如果不指定_id参数,那么 MongoDB 会为此文档分配一个唯一的ObjectId。

    ObjectId的生成规则:
    
    _id: ObjectId(4 bytes timestamp, 3 bytes machine id, 2 bytes process id, 3 bytes incrementer)

    要在集合中插入多个文档,可以在insert()命令中传递文档数组:

    db.mycollection.insert([
            {
                "_id":2,
                "title":"MongoDB Overview",
                "descrption":"MongoDB is no sql database",
                "by":"weiheng",
                "url":"http://www.weiheng.site",
                "likes":1,
            },
            {
                "_id":3,
                "title":"MongoDB Overview",
                "descrption":"MongoDB is no sql database",
                "by":"weiheng",
                "url":"http://www.weiheng.site",
                "likes":1,
            },
        ])

    db.collection_name.insertOne()

    将单个文档插入集合中,该方法返回包含新插入文档的_id.

    db.inventory.insertOne(
           {
            item: "canvas",
            qty: 100,
            tags: ["cotton"],
            size: { h: 28, w: 35.5, uom: "cm"}
            }
    )

    返回结果

    db.inventory.insertOne(
        ...    { item: "canvas", qty: 100, tags: ["cotton"], size: { h: 28, w: 35.5, uom: "cm" } }
        ... )
        {
                "acknowledged" : true,
                "insertedId" : ObjectId("5955220846be576f199feb55")
     }

    db.collection_name.insertMany()

    方法将多个文档插入到集合中,可将一系列文档传递给它。insertMany()返回包含新插入的文档_id字段值的文档。

    db.inventory.insertMany([
           { item: "journal", qty: 25, tags: ["blank", "red"], size: { h: 14, w: 21, uom: "cm" } },
           { item: "mat", qty: 85, tags: ["gray"], size: { h: 27.9, w: 35.5, uom: "cm" } },
           { item: "mousepad", qty: 25, tags: ["gel", "blue"], size: { h: 19, w: 22.85, uom: "cm" } }
        ])

    返回结果

    db.inventory.insertMany([
    ... { item: "journal", qty: 25, tags: ["blank", "red"], size: { h: 14, w: 21, uom: "cm" } },
    ... { item: "mat", qty: 85, tags: ["gray"], size: { h: 27.9, w: 35.5, uom: "cm" } },
    ... { item: "mousepad", qty: 25, tags: ["gel", "blue"], size: { h: 19, w: 22.85, uom: "cm" } }
    ... ])
    {
    "acknowledged" : true,
    "insertedIds" : [
    ObjectId("59552c1c46be576f199feb56"),
    ObjectId("59552c1c46be576f199feb57"),
    ObjectId("59552c1c46be576f199feb58")
    ]
    }

    九、MongoDB文档的查询

    要从MongoDB集合中查询数据,需要使用MongoDB的find()方法

    find()命令基本语法:

    db.collection_name.find(document)

    find()会以非结构化的方式显示所有文档内容:

    { "_id" : ObjectId("5b5eb4d81cec3f1204a88699"), "id" : 1, "title" : "MongoDB Overview", "descrption" : "MongoDB is no sql database", "by" : "weiheng", "url" : "http://www.weiheng.site", "likes" : 1 }
        { "_id" : 2, "title" : "MongoDB Overview", "descrption" : "MongoDB is no sql database", "by" : "weiheng", "url" : "http://www.weiheng.site", "likes" : 1 }
        { "_id" : 3, "title" : "MongoDB Overview", "descrption" : "MongoDB is no sql database", "by" : "weiheng", "url" : "http://www.weiheng.site", "likes" : 1 }
        { "_id" : 4, "title" : "MongoDB Overview", "descrption" : "MongoDB is no sql database", "by" : "weiheng", "url" : "http://www.weiheng.site", "likes" : 1 }

    pretty():格式化数据并显示结果:

    db.collection_name.find().pretty()
            {
                "_id" : ObjectId("5b5eb4d81cec3f1204a88699"),
                "id" : 1,
                "title" : "MongoDB Overview",
                "descrption" : "MongoDB is no sql database",
                "by" : "weiheng",
                "url" : "http://www.weiheng.site",
                "likes" : 1
            }

    除了find()还有findOne()它只会返回一个文档;默认返回第一个:

    findOne()语法:

    db.collenction_name.findOne()

    十、条件操作&比较运算符

    操作            语法                            示例                                                RDBMS等效语句
    相等            {<key>:<value>}                db.mycol.find({"by":"weiheng"}).pretty()        where by = 'weiheng'
    小于            {<key>:{$lt:<value>}}        db.mycol.find({"likes":{$lt:50}}).pretty()        where likes < 50
    小于等于         {<key>:{$lte:<value>}}        db.mycol.find({"likes":{$lte:50}}).pretty()        where likes <= 50
    大于            {<key>:{$gt:<value>}}        db.mycol.find({"likes":{$gt:50}}).pretty()        where likes > 50
    大于等于        {<key>:{$gte:<value>}}        db.mycol.find({"likes":{$gte:50}}).pretty()        where likes >= 50
    不等于          {<key>:{$ne:<value>}}        db.mycol.find({"likes":{$ne:50}}).pretty()        where likes != 50

    (1) 在find()中,如果将条件以,分割,则MongoDB将其视为AND操作

    db.mycol.find({$and: [{key1: value1}, {key2:value2}]})
        # by为weiheng,title为MongoDB Overview的文章
        db.mycollection.findOne({
            $and:[
            {"by":"weiheng"},
            {"title":"MongoDB Overview"}
            ]
        })

    (2) MongoDB中的OR操作符。基本语法和AND相同

    db.mycol.find({$or: [{key1: value1}, {key2:value2}]})
        db.mycollection.findOne({
            $or:[
            {"by":"weiheng"},
            {"title":"MongoDB Overview"}
            ]
        })

    (3) AND和OR

    db.mycol.find({key:value,$or: [{key1: value1}, {key2:value2}]})

     十一、update()更新操作

    MongoDB中使用Update将集合中的文档进行更新,update()方法更新现有文档中的值,而save()方法使用save()方法中传递的文档数据替换现有文档。

    update语法:

    db.COLLECTION_NAME.update(SELECTION_CRITERIA, UPDATED_DATA)

    示例:修改id为1的title

    // 查看id:1的信息
    db.mycollection.find({'id':1})
    
    { "_id" : ObjectId("5b5eb4d81cec3f1204a88699"), "id" : 1, "title" : "MongoDB Overview", "descrption" : "MongoDB is no sql database", "by" : "weiheng", "url" : "http://www.weiheng.site", "likes" : 1 }
    
    // 修改一下title为MongoDB
     db.mycollection.update({'id':1},{"$set":{"title":"MongoDB"}})
    // 再次查询
    db.mycollection.find({'id':1})
    
    
    { "_id" : ObjectId("5b5eb4d81cec3f1204a88699"), "id" : 1, "title" : "MongoDB", "descrption" : "MongoDB is no sql database", "by" : "weiheng", "url" : "http://www.weiheng.site", "likes" : 1 }

    十二、remove() & deleteOne() & deleteMany() 删除操作

    MongoDB中的 remove()方法用于从集合中删除文档。(官方不推荐使用remove(),推荐deleteOne和deleteMany())

    remove()方法的基本语法如下:

    db.COLLECTION_NAME.remove(DELLETION_CRITTERIA)

    示例: 删除id为1的数据

    // 以下示例将删除_id为“100”的文档。
    db.mycollection.remove({'id':1})

    官方推荐使用 deleteOne() 和 deleteMany() 方法:

    db.inventory.deleteMany({title: "MongoDB" })
    db.inventory.deleteOne({title: "MongoDB" })
  • 相关阅读:
    H3C ER6300 + 两台 H3C S5120 组网举例
    H3C S5120-52P-WiNet交换机配置
    H3C S5120清除console口密码
    光纤简介
    Windows server 2008 R2 多用户远程桌面
    AutoIt 软件自动化操作
    windows server 2008 R2 计划任务备份系统
    AD域部署使用bginfo软件
    使用WSL吧
    Could not load file or assembly……
  • 原文地址:https://www.cnblogs.com/weihengblog/p/9392276.html
Copyright © 2020-2023  润新知