0405-MongoDB

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模块的使用

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容