我爱编程

0405-MongoDB

2017-04-07  本文已影响0人  大Fy

MongoDB旨在为web应用提供可扩展的高性能数据存储方案

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

MongoDB文档


安装mongodb

MongoDB-OSX官方下载

# 进入 

/usr/localcd/usr/local


# 下载

sudo curl-O https://fastdl.mongodb.org/osx/mongodb-osx-x86_64-3.4.2.tgz


# 解压

sudo tar-zxvf mongodb-osx-x86_64-3.4.2.tgz


# 重命名为 mongodb 目录

sudo mv mongodb-osx-x86_64-3.4.2mongodb


安装完成后,我们可以把 MongoDB 的二进制命令文件目录(安装目录/bin)添加到 PATH 路径中:

exportPATH=/usr/local/mongodb/bin:$PATH


运行配置 MongoDB

# 首先创建一个数据库存储目录 /data/db:

sudo mkdir-p/data/db


# 启动 mongodb,默认数据库目录即为 /data/db:

sudo mongod


#创建文件,进入mongodb目录

cd /usr/local/mongodb

mkdir data

mkdir logs

两个文件夹,分别是存储数据库数据和日志文件的

# 然后

sudo vim mongodb.conf

其中conf文件内容为:

port=27017

dbpath=/usr/local/mongodb/data

logpath=/usr/local/mongodb/logs/mongodb.log

logappend=true

第一个是配置的是mongodb的启动端口,然后dbpath是指数据的存储路径,logpath是指日志存储路径,logappend是指日志是否以追加方式添加结束编辑按 esc

然后 :wq    保存退出

# 调用mongod命令,-f 是以配置文件形式启动,后面指定的是配置文件所在的位置

sudo /usr/local/mongodb/bin/mongod  -f /usr/local/mongodb/mongdb.conf

# 输入命令 ,telnet ip地址 端口号,测试能不能连接某个ip地址的端口,如果能连接,证明这个端口已经开了,也就是你的应用程序已经运行了

telnet 127.0.0.1 27017

**还有个方式,输入  ps -ef|grep mongodb


启动MongoDB

在 MongoDB 安装目录的 bin 目录下执行mongod即可。


MongoDB可视化工具的使用

# 下载

mac-mongodb可视化工具

# 打开

#设置


文档

文档是一个键值(key-value)对(即BSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,

**需要注意的是:

-文档中的键/值对是有序的。

-文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)。

-MongoDB区分类型和大小写。

-MongoDB的文档不能有重复的键。

-文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。

**文档键命名规范:

-键不能含有\0 (空字符)。这个字符用来表示键的结尾。

-.和$有特别的意义,只有在特定环境下才能使用。

-以下划线"_"开头的键是保留的(不是严格要求的)。


什么是集合

就是数据库表

没有固定结构

对集合可以插入不同格式和类型的数据,但通常情况下插入集合的数据都会有一定的关联性。

当第一个文档插入时,集合就会被创建。


capped collections

Capped collections 就是固定大小的collection。

它有很高的性能以及队列过期的特性(过期按照插入的顺序). 有点和 "RRD" 概念类似。

Capped collections是高性能自动的维护对象的插入顺序。它非常适合类似记录日志的功能 和标准的collection不同,你必须要显式的创建一个capped collection, 指定一个collection的大小,单位是字节。collection的数据存储空间值提前分配的。

要注意的是指定的存储大小包含了数据库的头信息。

db.createCollection("mycoll",{capped:true,size:100000})


MongoDB数据类型


Mongodb基本命令的使用

数据库

# 启动数据库

  ./mongo


# 查看所有数据库

   show dbs


# 删除数据库

   db.dropDatabase()


# 显示当前数据库对象或集合

   show db


# 运行"use"命令,可以连接到一个指定的数据库,如果数据库不存在,则创建数据库

   use local

有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库。

admin: 从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。

local:这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合

config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。


文档

# 刚创建的数据库并不在数据库的列表中, 要显示它,我们需要向该数据库插入一些数据。

# 插入文档,COLLECTION_NAME是集合名,如果该集合不在该数据库中, MongoDB 会自动创建该集合并插入文档。

   db.COLLECTION_NAME.insert(document)  /db.COLLECTION_NAME.save(document)


# 查看文档

  db.COLLECTION_NAME.find()


# 格式化返回结果查看文档

  db.COLLECTION_NAME.find().pretty()


# 只返回一个文档

    findOne()


# 也可以将数据直接定义成变量再插入

   document=({xx:'xx',yy:'yy'});

   db.COLLECTION_NAME.insert(document)


# 查看集合

    show tables


#  删除集合

    db.COLLECTION_NAME.drop()


# 更新文档

    ## update() 方法用于更新已存在的文档

参数说明:

query: update的查询条件,类似sql update查询内where后面的。

update: update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的

upsert: 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。

multi: 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。

writeConcern:可选,抛出异常的级别。

  ## save() 方法通过传入的文档来替换已有文档

参数说明:

document: 文档数据。

writeConcern:可选,抛出异常的级别。


# remove()函数是用来移除集合中的数据

参数说明:

query:(可选)删除的文档的条件。

justOne: (可选)如果设为 true 或 1,则只删除一个文档。

writeConcern:(可选)抛出异常的级别。

# 删除所有数据

  db.COLLECTION_NAME.remove({})


MongoDB 与 RDBMS Where 语句比较


MongoDB AND 条件

db.COLLECTION_NAME.find({key1:value1,key2:value2}).pretty()


MongoDB OR 条件

db.COLLECTION_NAME.find({$or:[{key1:value1},{key2:value2}]}).pretty()


AND 和 OR 联合使用

类似常规 SQL 语句为:'where likes>50 AND (by = '菜鸟教程' OR title = 'MongoDB 教程')'


MongoDB条件操作符

(>) 大于 - $gt

(<) 小于 - $lt

(>=) 大于等于 - $gte

(<= ) 小于等于 - $lte


MongoDB$type操作符

$type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。

db.COLLECTION_NAME.find({"条件":{$type:类型数字}})


MongoDB Limit() 方法

limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。

db.COLLECTION_NAME.find(“条件”).limit(记录条数)


MongoDB Skip() 方法

skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。

db.COLLECTION_NAME.find().skip(NUMBER)


MongoDB sort()方法

sort()方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列。

db.COLLECTION_NAME.find().sort({KEY:1/-1})


MongoDB 索引

索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构

db.COLLECTION_NAME.ensureIndex({KEY:1})

Key 值为要创建的索引字段,1为指定按升序创建索引,降序为-1,也可以设置使用多个字段创建索引(关系型数据库中称作复合索引)

ensureIndex() 接收可选参数,可选参数列表如下:


MongoDB 聚合

主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的 count(*)。

db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

聚合框架中常用的几个管道操作符:

$project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。

$match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。

$limit:用来限制MongoDB聚合管道返回的文档数。

$skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。

$unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。

$group:将集合中的文档分组,可用于统计结果。

$sort:将输入文档排序后输出。

$geoNear:输出接近某一地理位置的有序文档。


Node.js 连接 MongoDB

# 安装驱动

  npm install mongodb


# 插入数据


# 查询数据


# 更新数据


# 删除数据

mongoose模块的使用

上一篇下一篇

猜你喜欢

热点阅读