博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MongoDB 学习
阅读量:6222 次
发布时间:2019-06-21

本文共 6217 字,大约阅读时间需要 20 分钟。

是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

一、MongoDB 简介

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

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

clipboard.png

二、Linux平台安装MongoDB

1.下载安装

下载地址:

下载完安装包,并解压 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-install-directory> 为你 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

clipboard.png

4.MongoDB后台管理 Shell

如果你需要进入MongoDB后台管理,你需要先打开mongodb装目录的下的bin目录,然后执行mongo命令文件。

MongoDB Shell是MongoDB自带的交互式Javascript shell,用来对MongoDB进行操作和管理的交互式环境。
当你进入mongoDB后台后,它默认会链接到 test 文档(数据库):
重开一个窗口,然后进入MongoDB后台

$ cd /usr/local/mongodb/bin$ ./mongoMongoDB shell version: 3.0.6connecting to: testWelcome to the MongoDB shell.……

clipboard.png

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

> 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用户界面,即地址为:。

二、MongoDB概念解析

1.MongoDB和SQL语句比较

不管我们学习什么数据库都应该学习其中的基础概念,在mongodb中基本的概念是文档、集合、数据库,下面我们挨个介绍。

下表将帮助您更容易理解Mongo中的一些概念:

clipboard.png

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

clipboard.png

2.数据库

一个mongodb中可以建立多个数据库。

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

$ ./mongoMongoDB shell version: 3.0.6connecting to: test> show dbslocal  0.078GBtest   0.078GB>

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

$ ./mongoMongoDB shell version: 3.0.6connecting to: test> dbtest>

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

> use localswitched to db local> dblocal>

3.文档

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

一个简单的文档例子如下:

{"site":"www.runoob.com", "name":"菜鸟教程"}

三、MongoDB数据库创建和删除

1、创建

use DATABASE_NAME

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

> use booksswitched to db books> show dbslocal  0.078GBtest   0.078GB> db.info.insert({"name":"Jack Ma"})WriteResult({ "nInserted" : 1 })> show dbsbooks  0.078GBlocal  0.078GBtest   0.078GB

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

2、删除

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

db.dropDatabase()

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

> show dbsbooks  0.078GBlocal  0.078GBtest   0.078GB> db.dropDatabase(){ "dropped" : "books", "ok" : 1 }> show dbslocal  0.078GBtest   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 mongodbpecl install mongodb

擦,出现这样的错误

clipboard.png

sudo apt-get install php7.0-mongodb

on terminal. For the OpenSSL error, try this

sudo apt-get install openssl

转载地址:http://ezgja.baihongyu.com/

你可能感兴趣的文章
弃 Java 而使用 Kotlin 的你后悔了吗?| kotlin将会是最好的开发语言
查看>>
JavaScript 数据类型
查看>>
量子通信和大数据最有市场突破前景
查看>>
StringBuilder用法小结
查看>>
对‘初学者应该选择哪种编程语言’的回答——计算机达人成长之路(38)
查看>>
如何申请开通微信多客服功能
查看>>
Sr_C++_Engineer_(LBS_Engine@Global Map Dept.)
查看>>
非监督学习算法:异常检测
查看>>
App开发中甲乙方冲突会闹出啥后果?H5 APP 开发可以改变现状吗
查看>>
jquery的checkbox,radio,select等方法总结
查看>>
Linux coredump
查看>>
Ubuntu 10.04安装水晶(Mercury)无线网卡驱动
查看>>
Myeclipes快捷键
查看>>
我的友情链接
查看>>
ToRPC:一个双向RPC的Python实现
查看>>
我的友情链接
查看>>
nginx在reload时候报错invalid PID number
查看>>
神经网络和深度学习-第二周神经网络基础-第二节:Logistic回归
查看>>
Myeclipse代码提示及如何设置自动提示
查看>>
c/c++中保留两位有效数字
查看>>