资讯专栏INFORMATION COLUMN

MongoDB 学习

since1986 / 3160人阅读

摘要:旨在为应用提供可扩展的高性能数据存储解决方案。执行命令可以显示当前数据库对象或集合。第二个指定那些列显示和不显示表示不显示表示显示。教程教程想要读取从条记录后条记录,相当于中。当查询时同时使用,无论位置先后最后执行顺序再再。

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

一、MongoDB 简介

MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。

MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

二、Linux平台安装MongoDB 1.下载安装

下载地址:https://www.mongodb.com/downl...

下载完安装包,并解压 tgz(以下演示的是 64 位 Linux上的安装。

curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz    # 下载
tar -zxvf mongodb-linux-x86_64-3.0.6.tgz                                   # 解压

sudo mv  mongodb-linux-x86_64-3.0.6/ /usr/local/mongodb                         # 将解压包拷贝到指定目录

MongoDB 的可执行文件位于 bin 目录下,所以可以将其添加到 PATH 路径中:

export PATH=/bin:$PATH

// 即,这样的
export PATH=/usr/local/mongodb/bin:$PATH

为你 MongoDB 的安装路径。如本文的 /usr/local/mongodb

2.创建数据库目录

MongoDB的数据存储在data目录的db目录下,但是这个目录在安装过程不会自动创建,所以你需要手动创建data目录,并在data目录中创建db目录。
以下实例中我们将data目录创建于根目录下(/)。
注意:/data/db 是 MongoDB 默认的启动的数据库路径(--dbpath)。

mkdir -p /data/db
3.命令行中运行 MongoDB 服务

你可以再命令行中执行mongo安装目录中的bin目录执行mongod命令来启动mongdb服务。

注意:如果你的数据库目录不是/data/db,可以通过 --dbpath 来指定。

$ ./mongod
98 Unable to create/open lock file: /data/db/mongod.lock errno:13 Permission

如果出现这样的问题,可以,使用下边的命令进行权限修改:

sudo chown -R `id -u` /data/db

4.MongoDB后台管理 Shell

如果你需要进入MongoDB后台管理,你需要先打开mongodb装目录的下的bin目录,然后执行mongo命令文件。
MongoDB Shell是MongoDB自带的交互式Javascript shell,用来对MongoDB进行操作和管理的交互式环境。
当你进入mongoDB后台后,它默认会链接到 test 文档(数据库):
重开一个窗口,然后进入MongoDB后台

$ cd /usr/local/mongodb/bin
$ ./mongo
MongoDB shell version: 3.0.6
connecting to: test
Welcome to the MongoDB shell.
……

让我们插入一些简单的数据,并对插入的数据进行检索:

> db.corwien.insert({name:"corwien"})
WriteResult({ "nInserted" : 1 })
> db.corwien.find()
{ "_id" : ObjectId("5942b5a247b748bc9bd3276a"), "name" : "corwien" }
>

第一个命令将name "corwien" 插入到 corwien 集合的 name 字段中。

5.MongoDb web 用户界面

MongoDB 提供了简单的 HTTP 用户界面。 如果你想启用该功能,需要在启动的时候指定参数 --rest 。

$ ./mongod --dbpath=/data/db --rest

MongoDB 的 Web 界面访问端口比服务的端口多1000。
如果你的MongoDB运行端口使用默认的27017,你可以在端口号为28017访问web用户界面,即地址为:http://localhost:28017。

二、MongoDB概念解析 1.MongoDB和SQL语句比较

不管我们学习什么数据库都应该学习其中的基础概念,在mongodb中基本的概念是文档、集合、数据库,下面我们挨个介绍。
下表将帮助您更容易理解Mongo中的一些概念:

通过下图实例,我们也可以更直观的的了解Mongo中的一些概念:

2.数据库

一个mongodb中可以建立多个数据库。
MongoDB的默认数据库为"db",该数据库存储在data目录中。
MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。
"show dbs" 命令可以显示所有数据的列表。

$ ./mongo
MongoDB shell version: 3.0.6
connecting to: test
> show dbs
local  0.078GB
test   0.078GB
> 

执行 db 命令可以显示当前数据库对象或集合。

$ ./mongo
MongoDB shell version: 3.0.6
connecting to: test
> db
test
> 

运行use命令,可以连接到一个指定的数据库。

> use local
switched to db local
> db
local
> 
3.文档

文档是一组键值(key-value)对(即BSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。
一个简单的文档例子如下:

{"site":"www.runoob.com", "name":"菜鸟教程"}
三、MongoDB数据库创建和删除 1、创建
use DATABASE_NAME

如果数据库不存在,则创建数据库,否则切换到指定数据库

> use books
switched to db books
> show dbs
local  0.078GB
test   0.078GB
> db.info.insert({"name":"Jack Ma"})
WriteResult({ "nInserted" : 1 })
> show dbs
books  0.078GB
local  0.078GB
test   0.078GB

可以看到,我们刚创建的数据库 runoob 并不在数据库的列表中, 要显示它,我们需要向 runoob 数据库插入一些数据。

2、删除

MongoDB 删除数据库的语法格式如下:

db.dropDatabase()

删除当前数据库,默认为 test,你可以使用 db 命令查看当前数据库名。

> show dbs
books  0.078GB
local  0.078GB
test   0.078GB
> db.dropDatabase()
{ "dropped" : "books", "ok" : 1 }
> show dbs
local  0.078GB
test   0.078GB
> use test
四、MongoDB 插入文档

解释几个缩写吧,免得大家幸苦寻找:

$gt -------- greater than

$gte --------- gt equal

$lt -------- less than

$lte --------- lt equal

$ne ----------- not equal

文档插入数据:

> db.users.insert({"address":{"city":"guangzhou","state":"guangdong"},"tags":["music","cricket","blogs"],})
WriteResult({ "nInserted" : 1 })

查看:

> db.users.find().pretty();
{
    "_id" : ObjectId("5943a224b4c9662dcc837ba0"),
    "name" : "kaiyi",
    "address" : "beijing"
}
{
    "_id" : ObjectId("5943b6cfb4c9662dcc837ba1"),
    "address" : {
        "city" : "guangzhou",
        "state" : "guangdong"
    },
    "tags" : [
        "music",
        "cricket",
        "blogs"
    ]
}

给数组tags 添加索引:
为数组 tags 创建索引时,会为 music、cricket、blogs三个值建立多带带的索引。

> db.users.ensureIndex({"tags":1})
{
    "createdCollectionAutomatically" : false,
    "numIndexesBefore" : 2,
    "numIndexesAfter" : 3,
    "ok" : 1
}

创建索引后,我们可以这样检索集合的 tags 字段:

> db.users.find({tags:"cricket"})
{ "_id" : ObjectId("5943b6cfb4c9662dcc837ba1"), "address" : { "city" : "guangzhou", "state" : "guangdong" }, "tags" : [ "music", "cricket", "blogs" ] }
>

为了验证我们使用使用了索引,可以使用 explain 命令:

> db.users.find({tags:"cricket"}).explain()
{
    "queryPlanner" : {
        "plannerVersion" : 1,
        "namespace" : "test.users",
        "indexFilterSet" : false,
        "parsedQuery" : {
            "tags" : {
                "$eq" : "cricket"
            }
        },
        "winningPlan" : {
            "stage" : "FETCH",
            "inputStage" : {
                "stage" : "IXSCAN",
                "keyPattern" : {
                    "tags" : 1
                },
                "indexName" : "tags_1",
                "isMultiKey" : true,
                "direction" : "forward",
                "indexBounds" : {
                    "tags" : [
                        "["cricket", "cricket"]"
                    ]
                }
            }
        },
        "rejectedPlans" : [ ]
    },
    "serverInfo" : {
        "host" : "homestead",
        "port" : 27017,
        "version" : "3.0.6",
        "gitVersion" : "1ef45a23a4c5e3480ac919b28afcba3c615488f2"
    },
    "ok" : 1
}
>

其他查询语句解释:

db.col.find({},{"title":1,_id:0}).limit(2)

补充说明:
第一个 {} 放 where 条件,为空表示返回集合中所有文档。
第二个 {} 指定那些列显示和不显示 (0表示不显示 1表示显示)。

> db.col.find({},{"title":1,_id:0}).limit(2)
{ "title" : "PHP 教程" }
{ "title" : "Java 教程" }

想要读取从 10 条记录后 100 条记录,相当于 sql 中limit (10,100)。

> db.COLLECTION_NAME.find().skip(10).limit(100)

以上实例在集合中跳过前面 10 条返回 100 条数据。
skiplimit 结合就能实现分页。

当查询时同时使用sort,skip,limit,无论位置先后 最后执行顺序 sort再skip再limit

聚合
db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])

以上实例类似sql语句:

select by_user as _id, count(*) as num_tutorial from mycol group by by_user
五、PHP7 MongDB 安装与使用

本文教程只适合在 PHP7 的环境,如果你是 PHP5 环境,你可以参阅

PHP MongDB 安装与使用。

1、PHP7 Mongdb 扩展安装

我们使用 pecl 命令来安装:
文件下载的地址在:
/tmp/pear/download/mongodb-1.2.9.tgz

// $ /usr/local/php7/bin/pecl install mongodb
pecl install mongodb

擦,出现这样的错误

sudo apt-get install php7.0-mongodb

on terminal. For the OpenSSL error, try this

sudo apt-get install openssl

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/19018.html

相关文章

  • Mongodb学习记录:入门(一)

    摘要:通过在文档中嵌入文档和数组面向文档的方法能够仅使用一条记录来表现复杂的层次关系这与使用现代面向对象语言的开发者对数据的看法一致。在模式下会限制输出信息数据库命令输出,副本集活动,连接接受事件,连接关闭事件。指定一个文件或。 预热看我之前的文章Node学习记录: mongodb 这个系列旨在系统的学习Mongodb 使用windows的同学可以看这篇文章MongoDB开发学习 学习目标 ...

    whinc 评论0 收藏0
  • MongoDB学习笔记 — mac下MongoDB的安装与使用

    摘要:在上安装有两种方法下载安装包安装使用安装方式下载安装包安装注意在中不支持像方式,只好用方式来下载。再打开一个终端窗口,执行以下命令停止在开启服务的控制台,即可停止或者直接关闭开启服务的控制台。 在Mac上安装MongoDB有两种方法: 下载安装包安装 使用 brew 安装 1. curl方式下载安装包安装 注意:在mac中不支持像wget方式,只好用curl方式来下载。 可以直接到...

    guqiu 评论0 收藏0
  • MongoDB学习笔记 — mac下MongoDB的安装与使用

    摘要:在上安装有两种方法下载安装包安装使用安装方式下载安装包安装注意在中不支持像方式,只好用方式来下载。再打开一个终端窗口,执行以下命令停止在开启服务的控制台,即可停止或者直接关闭开启服务的控制台。 在Mac上安装MongoDB有两种方法: 下载安装包安装 使用 brew 安装 1. curl方式下载安装包安装 注意:在mac中不支持像wget方式,只好用curl方式来下载。 可以直接到...

    luck 评论0 收藏0
  • mongodb 学习记录

    摘要:操作选择数据库选择或创建集合创建一个文档测试插入文档到集合文档插入成功结果文档插入成功选择数据库选择或创建集合结果各种 1.安装mongodb 服务 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz //下载 tar -zxvf mongodb-linux-x86_64-3.0.6.tgz /...

    henry14 评论0 收藏0

发表评论

0条评论

since1986

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<