• MongoDB入门


    MongoDB入门

    1、什么是NoSQL

    NoSQL是和传统的关系型数据库不同的数据库的统称。

    关系型数据库的代表有MySQL,Oracle,Microsoft SQL Server。

    NoSQL的代表有MongoDB,Memcached,Redis。

    2、NoSQL分类

    NoSQL分四类:键值存储,文档存储,图像存储,列存储。

    其中,MongoDB属于文档存储,而Memcached和Redis属于内存级别的键值存储。

    3、MongoDB简介

    MongoDB是一个开源,高性能,并给予分布式文件存储的文档型数据库,

    4、MongoDB特性

    1、面向集合存储,易存储对象类型的数据
    2、模式自由
    3、支持动态查询
    4、支持完全索引,包含内部对象
    5、支持查询
    6、支持复制和故障恢复
    7、使用二进制数据存储,可以存储大型的对象(如图片,视频等)
    8、自动处理碎片
    9、支持多种语言
    10、文档存储格式是BSON
    11、网络访问
    

    5、MongoDB安装

    1、环境准备

    系统:CentOS7

    MongoDB:3.2.8

    2、安装

    创建一个目录,用于存放MongoDB的文件

    mkdir /software/mongodb
    cd /software/mongodb
    

    使用wget下载安装包

    wget http://downloads.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.2.8.tgz
    

    使用tar解压

    tar zxvf mongodb-linux-x86_64-rhel62-3.2.8.tgz
    

    再创建一个data文件夹和一个log文件夹

    mkdir /software/mongodb/mongo/data
    mkdir /software/mongodb/mongo/log
    chmod 777 /software/mongodb/mongo/data
    chmod 777 /software/mongodb/mongo/log
    

    在bin目录下创建一个mongodb.conf文件,编辑内容:

    #数据文件目录
    dbpath = /software/mongodb/mongo/data
    #日志目录
    logpath = /software/mongodb/mongo/log/mongodb.log
    #端口
    port = 27017
    #后台运行
    fork = true
    nohttpinterface = true
    

    在/lib/systemd/system目录下创建一个mongodb.service文件,编辑内容:

    [Unit]  
    Description=mongodb  
    After=network.target remote-fs.target nss-lookup.target  
      
    [Service]  
    Type=forking  
    ExecStart=/software/mongodb/mongo/bin/mongod --config /software/mongodb/mongo/bin/mongodb.conf  
    ExecReload=/bin/kill -s HUP $MAINPID  
    ExecStop=/software/mongodb/mongo/mongod --shutdown --config /software/mongodb/mongo/bin/mongodb.conf  
    PrivateTmp=true  
      
    [Install]  
    WantedBy=multi-user.target
    

    并赋予权限

    chmod 754 mongodb.service
    

    3、运行

    启动mongodb服务

    systemctl start mongodb.service
    

    启动mongodb

    ./mongo
    

    控制台输出

    [root@iz2zeaf5jdjve80rjlsjgnz bin]# ./mongo
    MongoDB shell version: 3.2.8
    connecting to: test
    Server has startup warnings: 
    2019-12-06T09:21:36.266+0800 I CONTROL  [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
    2019-12-06T09:21:36.266+0800 I CONTROL  [initandlisten] 
    2019-12-06T09:21:36.267+0800 I CONTROL  [initandlisten] 
    2019-12-06T09:21:36.267+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
    2019-12-06T09:21:36.267+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
    2019-12-06T09:21:36.267+0800 I CONTROL  [initandlisten] 
    2019-12-06T09:21:36.267+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
    2019-12-06T09:21:36.267+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
    2019-12-06T09:21:36.267+0800 I CONTROL  [initandlisten] 
    > 
    

    6、MongoDB操作

    1、数据库

    MongoDB默认数据库是test。如果没有创建数据库,默认对test数据库进行操作。

    【查看所有数据库】

    > show dbs
    local  0.000GB
    
    

    【创建/选择数据库】

    > use mydb
    switched to db mydb
    > show dbs
    local  0.000GB
    > db
    mydb
    

    创建数据库后,使用show dbs会发现没有创建的数据库,这是因为还没有往新创建的数据库里面添加数据。

    添加一条数据

    > db.collection.insert({"name":"rlxy93"})
    WriteResult({ "nInserted" : 1 })
    > show dbs
    local  0.000GB
    mydb   0.000GB
    

    【查看所有集合】

    插入一条数据时,如果指定的collection没有创建,那么会自动创建。

    > show collections
    collection
    

    【删除数据库】

    如果没有使用use命令,则默认删除test数据库,如果指定了,删除正在使用的那个数据库。

    > db.dropDatabase()
    { "dropped" : "mydb", "ok" : 1 }
    

    2、集合Collection

    集合类似于关系型数据库中的表,一张表对应着MongoDB中的一个集合。

    【创建集合】

    db.createCollection(name, {capped: <Boolean>, autoIndexId: <Boolean>, size: <number>, max <number>} )
    

    其中,

    name:集合名
    
    capped:是否启动集合限制
    
    autoIndexId:是否使用_Id作为索引,默认是true
    
    size:集合使用的存储空间大小
    
    max:集合的最大条数,默认是无限
    
    > db.createCollection("my_collection")
    { "ok" : 1 }
    

    【删除集合】

    删除成功返回true,删除失败返回false

    > show collections
    my_collection
    > db.my_collection.drop()
    true
    > show collections
    
    

    【插入数据】

    insert():将一条或多条数据插入到指定的Collection中

    插入一条时,直接用{}括起来,插入多条时,需要用[]把{}的集合括起来组成一个数组

    > db.createCollection("my_collection")
    { "ok" : 1 }
    > db.my_collection.insert({"name":"rlxy93","address":"chongqing"})
    WriteResult({ "nInserted" : 1 })
    > db.my_collection.insert([{"name":"a","address":"chongqing"},{"name":"b","address":"chongqing"}])
    BulkWriteResult({
            "writeErrors" : [ ],
            "writeConcernErrors" : [ ],
            "nInserted" : 2,
            "nUpserted" : 0,
            "nMatched" : 0,
            "nModified" : 0,
            "nRemoved" : 0,
            "upserted" : [ ]
    })
    > db.my_collection.find()
    { "_id" : ObjectId("5de9c0747be63bdb51ddcd6c"), "name" : "rlxy93", "address" : "chongqing" }
    { "_id" : ObjectId("5de9c15f7be63bdb51ddcd6d"), "name" : "a", "address" : "chongqing" }
    { "_id" : ObjectId("5de9c1a27be63bdb51ddcd6f"), "name" : "b", "address" : "chongqing" }
    
    
    

    insertOne():将一条数据插入到指定的Collection中

    插入后,MongoDB会自动生成该条文档的一个_id

    > db.my_collection.insertOne({"name":"lxy","address":"sichuan"})
    {
            "acknowledged" : true,
            "insertedId" : ObjectId("5de9c2777be63bdb51ddcd70")
    }
    > db.my_collection.find()
    { "_id" : ObjectId("5de9c0747be63bdb51ddcd6c"), "name" : "rlxy93", "address" : "chongqing" }
    { "_id" : ObjectId("5de9c1a27be63bdb51ddcd6e"), "name" : "a", "address" : "chongqing" }
    { "_id" : ObjectId("5de9c1a27be63bdb51ddcd6f"), "name" : "b", "address" : "chongqing" }
    { "_id" : ObjectId("5de9c2777be63bdb51ddcd70"), "name" : "lxy", "address" : "sichuan" }
    
    

    insertMany():将多条数据插入到指定的Collection中

    > db.my_collection.insertMany([{"name":"c","address":"chongqing"},{"name":"d","address":"chongqing"}])
    {
            "acknowledged" : true,
            "insertedIds" : [
                    ObjectId("5de9c3167be63bdb51ddcd71"),
                    ObjectId("5de9c3167be63bdb51ddcd72")
            ]
    }
    
    

    【查询数据】

    db.my_collection.find([query],[fields])
    db.my_collection.find(...).count()
    db.my_collection.find(...).limit(n)
    db.my_collection.find(...).skip(n)
    db.my_collection.find(...).sort(...)
    
    

    其中,

    query:过滤条件
    
    fields:需要查询返回的字段
    
    count():统计查询到的数量
    
    limit(n):显示多少条数据
    
    skip(n):跳过多少条
    
    sort():排序
    

    【查询集合的所有数据】

    > db.my_collection.find()
    { "_id" : ObjectId("5de9c0747be63bdb51ddcd6c"), "name" : "rlxy93", "address" : "chongqing" }
    { "_id" : ObjectId("5de9c1a27be63bdb51ddcd6e"), "name" : "a", "address" : "chongqing" }
    { "_id" : ObjectId("5de9c1a27be63bdb51ddcd6f"), "name" : "b", "address" : "chongqing" }
    { "_id" : ObjectId("5de9c2777be63bdb51ddcd70"), "name" : "lxy", "address" : "sichuan" }
    { "_id" : ObjectId("5de9c3167be63bdb51ddcd71"), "name" : "c", "address" : "chongqing" }
    { "_id" : ObjectId("5de9c3167be63bdb51ddcd72"), "name" : "d", "address" : "chongqing" }
    
    

    【根据条件查询集合的数据】

    > db.my_collection.find({"name":"a"})
    { "_id" : ObjectId("5de9c1a27be63bdb51ddcd6e"), "name" : "a", "address" : "chongqing" }
    
    

    【根据条件查询集合的数据,并返回指定字段】

    要显示哪个字段,需要在第二个参数设置 字段名:1

    1表示显示,0表示不显示。

    > db.my_collection.find({"name":"a"},{"address":1})
    { "_id" : ObjectId("5de9c1a27be63bdb51ddcd6e"), "address" : "chongqing" }
    
    

    【统计查询到的数量】

    > db.my_collection.find()
    { "_id" : ObjectId("5de9c0747be63bdb51ddcd6c"), "name" : "rlxy93", "address" : "chongqing" }
    { "_id" : ObjectId("5de9c1a27be63bdb51ddcd6e"), "name" : "a", "address" : "chongqing" }
    { "_id" : ObjectId("5de9c1a27be63bdb51ddcd6f"), "name" : "b", "address" : "chongqing" }
    { "_id" : ObjectId("5de9c2777be63bdb51ddcd70"), "name" : "lxy", "address" : "sichuan" }
    { "_id" : ObjectId("5de9c3167be63bdb51ddcd71"), "name" : "c", "address" : "chongqing" }
    { "_id" : ObjectId("5de9c3167be63bdb51ddcd72"), "name" : "d", "address" : "chongqing" }
    { "_id" : ObjectId("5de9c7a97be63bdb51ddcd73"), "name" : "rlxy93", "address" : "chongqing" }
    > db.my_collection.find().count()
    7
    
    

    【显示指定条数】

    > db.my_collection.find().limit(2)
    { "_id" : ObjectId("5de9c0747be63bdb51ddcd6c"), "name" : "rlxy93", "address" : "chongqing" }
    { "_id" : ObjectId("5de9c1a27be63bdb51ddcd6e"), "name" : "a", "address" : "chongqing" }
    
    

    【跳过指定条数】

    > db.my_collection.find().skip(2)
    { "_id" : ObjectId("5de9c1a27be63bdb51ddcd6f"), "name" : "b", "address" : "chongqing" }
    { "_id" : ObjectId("5de9c2777be63bdb51ddcd70"), "name" : "lxy", "address" : "sichuan" }
    { "_id" : ObjectId("5de9c3167be63bdb51ddcd71"), "name" : "c", "address" : "chongqing" }
    { "_id" : ObjectId("5de9c3167be63bdb51ddcd72"), "name" : "d", "address" : "chongqing" }
    { "_id" : ObjectId("5de9c7a97be63bdb51ddcd73"), "name" : "rlxy93", "address" : "chongqing" }
    

    【按照指定字段排序】

    > db.my_collection.find().sort({"name":1})
    { "_id" : ObjectId("5de9c1a27be63bdb51ddcd6e"), "name" : "a", "address" : "chongqing" }
    { "_id" : ObjectId("5de9c1a27be63bdb51ddcd6f"), "name" : "b", "address" : "chongqing" }
    { "_id" : ObjectId("5de9c3167be63bdb51ddcd71"), "name" : "c", "address" : "chongqing" }
    { "_id" : ObjectId("5de9c3167be63bdb51ddcd72"), "name" : "d", "address" : "chongqing" }
    { "_id" : ObjectId("5de9c2777be63bdb51ddcd70"), "name" : "lxy", "address" : "sichuan" }
    { "_id" : ObjectId("5de9c0747be63bdb51ddcd6c"), "name" : "rlxy93", "address" : "chongqing" }
    { "_id" : ObjectId("5de9c7a97be63bdb51ddcd73"), "name" : "rlxy93", "address" : "chongqing" }
    

    【更新数据】

    db.my_collection.updateOne( filter, update, <optional params> )
    db.my_collection.updateMany( filter, update, <optional params> )
    db.my_collection.replaceOne( filter, replacement, <optional params> )
    db.my_collection.update( query, object[, upsert_bool, multi_bool] )
    

    其中,

    filter:过滤条件
    
    update:替换的值
    
    optional params:可选的值有upsert, w, wtimeout, j
    
    update:是集成了updateOne,updateMany,replaceOne为一体的
    

    【更新一条符合条件的数据】

    如果update不加其他参数,默认只更改一行

    > db.my_collection.updateOne({"name":"rlxy93"},{"$set":{"address":"sichuan"}})
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    > db.my_collection.find()
    { "_id" : ObjectId("5de9c0747be63bdb51ddcd6c"), "name" : "rlxy93", "address" : "sichuan" }
    { "_id" : ObjectId("5de9c1a27be63bdb51ddcd6e"), "name" : "a", "address" : "sichuan" }
    { "_id" : ObjectId("5de9c1a27be63bdb51ddcd6f"), "name" : "b", "address" : "chongqing" }
    { "_id" : ObjectId("5de9c2777be63bdb51ddcd70"), "name" : "lxy", "address" : "sichuan" }
    { "_id" : ObjectId("5de9c3167be63bdb51ddcd71"), "name" : "c", "address" : "chongqing" }
    { "_id" : ObjectId("5de9c3167be63bdb51ddcd72"), "name" : "d", "address" : "chongqing" }
    { "_id" : ObjectId("5de9c7a97be63bdb51ddcd73"), "name" : "rlxy93", "address" : "chongqing" }
    

    【更新所有符合条件的数据】

    > db.my_collection.updateMany({"name":"a"},{$set:{"address":"yongchuan"}})
    { "acknowledged" : true, "matchedCount" : 2, "modifiedCount" : 2 }
    > db.my_collection.find()
    { "_id" : ObjectId("5de9c0747be63bdb51ddcd6c"), "name" : "rlxy93", "address" : "sichuan" }
    { "_id" : ObjectId("5de9c1a27be63bdb51ddcd6e"), "name" : "a", "address" : "yongchuan" }
    { "_id" : ObjectId("5de9c1a27be63bdb51ddcd6f"), "name" : "b", "address" : "chongqing" }
    { "_id" : ObjectId("5de9c2777be63bdb51ddcd70"), "name" : "lxy", "address" : "sichuan" }
    { "_id" : ObjectId("5de9c3167be63bdb51ddcd71"), "name" : "c", "address" : "chongqing" }
    { "_id" : ObjectId("5de9c3167be63bdb51ddcd72"), "name" : "d", "address" : "chongqing" }
    { "_id" : ObjectId("5de9c7a97be63bdb51ddcd73"), "name" : "rlxy93", "address" : "sichuan" }
    { "_id" : ObjectId("5de9d0f37be63bdb51ddcd74"), "name" : "a", "address" : "yongchuan" }
    

    【替换数据】

    > db.my_collection.replaceOne({"name":"a"},{"name":"replaceOne"})
    { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
    > db.my_collection.find()
    { "_id" : ObjectId("5de9c0747be63bdb51ddcd6c"), "name" : "rlxy93", "address" : "sichuan" }
    { "_id" : ObjectId("5de9c1a27be63bdb51ddcd6e"), "name" : "replaceOne" }
    { "_id" : ObjectId("5de9c1a27be63bdb51ddcd6f"), "name" : "b", "address" : "chongqing" }
    { "_id" : ObjectId("5de9c2777be63bdb51ddcd70"), "name" : "lxy", "address" : "sichuan" }
    { "_id" : ObjectId("5de9c3167be63bdb51ddcd71"), "name" : "c", "address" : "chongqing" }
    { "_id" : ObjectId("5de9c3167be63bdb51ddcd72"), "name" : "d", "address" : "chongqing" }
    { "_id" : ObjectId("5de9c7a97be63bdb51ddcd73"), "name" : "rlxy93", "address" : "sichuan" }
    { "_id" : ObjectId("5de9d0f37be63bdb51ddcd74"), "name" : "a", "address" : "yongchuan" }
    
    

    【删除数据】

    db.my_collection.deleteOne( filter, <optional params> )
    db.my_collection.deleteMany( filter, <optional params> )
    db.my_collection.remove(query)
    
    

    其中,

    filter:过滤条件
    
    query:过滤条件
    

    【删除一条数据】

    > db.my_collection.find()
    { "_id" : ObjectId("5de9c0747be63bdb51ddcd6c"), "name" : "rlxy93", "address" : "sichuan" }
    { "_id" : ObjectId("5de9c1a27be63bdb51ddcd6e"), "name" : "replaceOne" }
    { "_id" : ObjectId("5de9c1a27be63bdb51ddcd6f"), "name" : "b", "address" : "chongqing" }
    { "_id" : ObjectId("5de9c2777be63bdb51ddcd70"), "name" : "lxy", "address" : "sichuan" }
    { "_id" : ObjectId("5de9c3167be63bdb51ddcd71"), "name" : "c", "address" : "chongqing" }
    { "_id" : ObjectId("5de9c3167be63bdb51ddcd72"), "name" : "d", "address" : "chongqing" }
    { "_id" : ObjectId("5de9c7a97be63bdb51ddcd73"), "name" : "rlxy93", "address" : "sichuan" }
    { "_id" : ObjectId("5de9d0f37be63bdb51ddcd74"), "name" : "a", "address" : "yongchuan" }
    > db.my_collection.deleteOne({"name":"c"})
    { "acknowledged" : true, "deletedCount" : 1 }
    > db.my_collection.find()
    { "_id" : ObjectId("5de9c0747be63bdb51ddcd6c"), "name" : "rlxy93", "address" : "sichuan" }
    { "_id" : ObjectId("5de9c1a27be63bdb51ddcd6e"), "name" : "replaceOne" }
    { "_id" : ObjectId("5de9c1a27be63bdb51ddcd6f"), "name" : "b", "address" : "chongqing" }
    { "_id" : ObjectId("5de9c2777be63bdb51ddcd70"), "name" : "lxy", "address" : "sichuan" }
    { "_id" : ObjectId("5de9c3167be63bdb51ddcd72"), "name" : "d", "address" : "chongqing" }
    { "_id" : ObjectId("5de9c7a97be63bdb51ddcd73"), "name" : "rlxy93", "address" : "sichuan" }
    { "_id" : ObjectId("5de9d0f37be63bdb51ddcd74"), "name" : "a", "address" : "yongchuan" }
    

    【删除多条数据】

    > db.my_collection.find()
    { "_id" : ObjectId("5de9c0747be63bdb51ddcd6c"), "name" : "rlxy93", "address" : "sichuan" }
    { "_id" : ObjectId("5de9c1a27be63bdb51ddcd6e"), "name" : "replaceOne" }
    { "_id" : ObjectId("5de9c1a27be63bdb51ddcd6f"), "name" : "b", "address" : "chongqing" }
    { "_id" : ObjectId("5de9c2777be63bdb51ddcd70"), "name" : "lxy", "address" : "sichuan" }
    { "_id" : ObjectId("5de9c3167be63bdb51ddcd72"), "name" : "d", "address" : "chongqing" }
    { "_id" : ObjectId("5de9c7a97be63bdb51ddcd73"), "name" : "rlxy93", "address" : "sichuan" }
    { "_id" : ObjectId("5de9d0f37be63bdb51ddcd74"), "name" : "a", "address" : "yongchuan" }
    > db.my_collection.deleteMany({"address":"chongqing"})
    { "acknowledged" : true, "deletedCount" : 2 }
    > db.my_collection.find()
    { "_id" : ObjectId("5de9c0747be63bdb51ddcd6c"), "name" : "rlxy93", "address" : "sichuan" }
    { "_id" : ObjectId("5de9c1a27be63bdb51ddcd6e"), "name" : "replaceOne" }
    { "_id" : ObjectId("5de9c2777be63bdb51ddcd70"), "name" : "lxy", "address" : "sichuan" }
    { "_id" : ObjectId("5de9c7a97be63bdb51ddcd73"), "name" : "rlxy93", "address" : "sichuan" }
    { "_id" : ObjectId("5de9d0f37be63bdb51ddcd74"), "name" : "a", "address" : "yongchuan" }
    

    【删除多条数据】

    > db.my_collection.find()
    { "_id" : ObjectId("5de9c0747be63bdb51ddcd6c"), "name" : "rlxy93", "address" : "sichuan" }
    { "_id" : ObjectId("5de9c1a27be63bdb51ddcd6e"), "name" : "replaceOne" }
    { "_id" : ObjectId("5de9c2777be63bdb51ddcd70"), "name" : "lxy", "address" : "sichuan" }
    { "_id" : ObjectId("5de9c7a97be63bdb51ddcd73"), "name" : "rlxy93", "address" : "sichuan" }
    { "_id" : ObjectId("5de9d0f37be63bdb51ddcd74"), "name" : "a", "address" : "yongchuan" }
    > db.my_collection.remove({"name":"rlxy93"})
    WriteResult({ "nRemoved" : 2 })
    > db.my_collection.find()
    { "_id" : ObjectId("5de9c1a27be63bdb51ddcd6e"), "name" : "replaceOne" }
    { "_id" : ObjectId("5de9c2777be63bdb51ddcd70"), "name" : "lxy", "address" : "sichuan" }
    { "_id" : ObjectId("5de9d0f37be63bdb51ddcd74"), "name" : "a", "address" : "yongchuan" }
    

    7、总结

    通过以上笔记,能够学到NoSQL的一些概念,还有MongoDB的特点,安装等,并学会了MongoDB的基本CRUD操作。

  • 相关阅读:
    支持复制粘贴word公式的wangEditor编辑器
    支持复制粘贴word公式的KindEditor编辑器
    支持复制粘贴word公式的CKEditor编辑器
    支持复制粘贴word公式的百度HTML编辑器
    支持复制粘贴word公式的百度Web编辑器
    PHP 大文件上传分享(500M以上)
    PHP 大文件上传问题(500M以上)
    SAP ABAP报表依赖设计原理详解
    获得某个时间段内修改过的所有ABAP对象列表
    FLINK实例(13):Flink的重启策略(一)
  • 原文地址:https://www.cnblogs.com/lxxxxxxy/p/12001315.html
Copyright © 2020-2023  润新知