zoukankan      html  css  js  c++  java
  • 循序渐进MongoDB V3.4(Ubuntu)

    MongoDB是一个跨平台、开源、面向文档的数据库。它具备高性能、高可用性和易于扩展的特性。学习MongoDB要特别关注以下几个概念:

    • Database它是集合(Collections)的容器。
    • Collection它是MongoDB文档(documents)的一个组。
    • Document它是一组键值对(a set of key-value pairs)。

    从安装开始:

    安装

    安装之前我们需要导入MongoDB GPG key:

    $ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927

    导入MongoDB repository:

    $ echo "deb http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
    
    $ sudo apt-get update

    可以安装了,因是目前最新的3.4所以可能要加“--allow-unauthenticated”选项:

    // 先用下面的命令,如果要求 --allow-unauthenticated 就转到下一个命令
    $ sudo apt-get install -y mongodb-org

    // 根据提示可以使用下面这个命令
    $ sudo apt-get install -y mongodb-org --allow-unauthenticated

    这是一个漫长的过程,以我200M光纤的速度还是花了两小时。

    完成安装后通过如下命令修改MongoDB的服务文件:

    $ cd /lib/systemd/system
    
    $ sudo nano mongod.service

    并确保文件是以下内容:

    [Unit]
    Description=High-performance, schema-free document-oriented database
    After=network.target
    Documentation=https://docs.mongodb.org/manual
    
    [Service]
    User=mongodb
    Group=mongodb
    ExecStart=/usr/bin/mongod --quiet --config /etc/mongod.conf
    
    [Install]
    WantedBy=multi-user.target

    退出编辑器前要保存该文件。

    键入下面命令使MongoDB能够开机启动:

    $ sudo systemctl start mongod
    
    $ sudo systemctl enable mongod

    重新启动机器以验证安装是正确的。机器启动后键入下面命令,如果进入MongoDB控制台(看到控制台“>”符号)就说明安装成功了:

    $ mongo

    在MongoDB控制台键入下面命令:

    > use admin
    
    > db.createUser({user:"admin", pwd:"admin123", roles:[{role:"root", db:"admin"}]})

    > exit

    修改mongod.service并加入认证选项:

    $ cd /lib/systemd/system
    
    $ sudo nano mongod.service

    修改文件第9行为如下内容:

    ExecStart=/usr/bin/mongod --quiet --auth --config /etc/mongod.conf

    保存并退出。

    执行下面命令重起MongoDB:

    $ sudo systemctl daemon-reload
    
    $ sudo service mongod restart

    安装成功,现在可以用设定的用户及密码登录控制台了:

    $ mongo -u admin -p admin123 --authenticationDatabase admin

    进入MongoDB控制台,畅游其中之前需要了解以下几个简单的命令:

    • help 根级别帮助
    • db.version() 列表当前MongoDB的版本
    • db.stats() 列表当前数据库(database)的状态
    • db.help() 列表DB当前的方法
    • show dbs 列表当前的可用的数据库(database)
    • db 列表当前在用的数据库(database)
    • show collections 列表当前数据库的可用集合

    热个身吧:

    > db.version()
    3.4.10
    
    > db.stats()
    {
        "db" : "test",
        "collections" : 0,
        "views" : 0,
        "objects" : 0,
        "avgObjSize" : 0,
        "dataSize" : 0,
        "storageSize" : 0,
        "numExtents" : 0,
        "indexes" : 0,
        "indexSize" : 0,
        "fileSize" : 0,
        "ok" : 1
    }
    
    > show dbs
    admin  0.000GB
    local  0.000GB
    
    > db
    test
    
    > show collections

    为节省篇幅db.help()就不列了,下面进入MongoDB的实践篇。

    实践

    MongoDB虽然与传统的关系数据库系统有很多差异,但还是可以有以下的类别:

    • MongoDB是数据库容器,管理多个数据库实体,这点与关系数据库是一致的。
    • 一个MongoDB数据库是集合容器,管理多个集合(collection),这里的集合概念与关系数据库中表(table)的概念是一个级别的。
    • 一个集合(collection)是文档(document)容器,管理多个文档,而这个文档概念与关系表中行(row)是一个级别的概念。
    • 一个文档(document)又是键值对的集合(set of key-value pairs),而每个键值对与关系表中的字段(field)是一个级别的概念。
    • 同一关系表(table)中,不同的行有完全相同的数据字段定义,他们存储完全相似的数据;而MongoDb集合(collection)中的文档(document)它们可以有完全不同的数据定义,无论是数据类型和键值对个数都可以不同。这三MongoDB和关系数据库最显著的区别之一。

    下图表现了关系表与MongoDB的Collection之间的区别:

    通过类比我们对MongoDB已经有了一个清晰的概念,下面继续MongoDB Step by Step。

    创建、删除数据库(Database)

    // 语法:use <db name>
    // 下面语句,如果mydb存在则选择它为当前数据库;
    // 否则,创建一个名为mydb的数据库并选择它
    > use mydb switched to db mydb

    // 语法:db.dropDatabase()
    // 下面语句删除当前数据,删除前注意选择当前库
    > use mydb
    switched to db mydb

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

    指定数据库中创建、删除集合 (Collection)

    > use mydb
    
    // 语法:db.createCollection(<collection>[, {options}])
    > db.createCollection("Books")

    // 列表当前db的集合
    > show collections
    Books

    // 语法:db.<collection>.drop()
    // 返回 true 成功
    > db.Books.drop()
    true

    集合(Collection)中插入(insert)文档(Document) 

    // 语法:db.<collection>.insert(<{document}>)
    // <document> JSON format data
    // 返回插入状态 > db.Books.insert({
    "title": "JavaScript"})
    WriteResult({"nInserted" : 1})

    // Mongo console "enter" new line
    > db.Books.insert({
    "title": "Thinking in Java",
    "price": 60
    })

    // 此例中插入的文档有不同的结构
    > db.Books.insert({
    "title": "Java EE",
    "subtitle": "6th Edition",
    "price": 99
    })

    // 列表插入的文档
    // 语法:db.<collection>.find([{options}]) 或 db.<collection>.find([{options}]).pretty()
    > db.Books.find()
    { "_id" : ObjectId("5a02c8fe850ae434e394bc09"), "title" : "JavaScript" }
    { "_id" : ObjectId("5a02c93b850ae434e394bc0a"), "title" : "Thinking in Java", "price" : 59 }
    { "_id" : ObjectId("5a02d0a2850ae434e394bc0c"), "title" : "Java EE", "subtitle" : "6th Edition", "price" : 99 }

    集合(collection)中更新(update)文档(document)

    // 语法:db.<collection>.update(<{codition}>, <{update}>)
    > db.Books.update(
    {
    "_id": ObjectId("5a02d0a2850ae434e394bc0c")
    },
    {
    $set:
    {
    "price": 100
    }
    }
    )
  • 相关阅读:
    软工实践寒假作业(1/2)
    javaSprintBoot技术总结
    个人作业——软件工程实践总结&个人技术博客
    个人作业软件评测
    结对第二次作业——某次疫情统计可视化的实现
    结对第一次—疫情统计可视化(原型设计)
    软工实践寒假作业(2/2)
    《软件工程》_寒假作业1_职业生涯规划
    部署前端项目和后端项目到服务器
    软件工程实践总结&个人技术博客
  • 原文地址:https://www.cnblogs.com/jinzd/p/7803277.html
Copyright © 2011-2022 走看看