mongodb入门教程


title: mongodb入门教程
date: 2016-04-06 14:47:18
tags:
---linux

为何要认识呢,由于这玩意就一傻逼

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

蛋疼的就是这个介于。。。之间,既不能把它当成关系型数据库也不能当作非关系型数据库,具体哪里不爽下面慢慢介绍shell

1、安装

vim conf/mongodb.confapp

dbpath=/home/waimaiw/mongodb/db
logpath=/home/waimaiw/mongodb/logs/mongodb.log
port=27017
nohttpinterface=true
auth=true

绑定配置文件和访问地址运维

/home/waimaiw/mongodb/bin/mongod --bind_ip localhost -f
/home/waimaiw/mongodb/conf/mongodb.conf
绑定多个ip
--bind_ip=ip1,ip2yii

配置开机启动学习

vim /etc/rc.localspa

/home/waimaiw/mongodb/bin/mongod --config
/home/waimaiw/mongodb/bin/mongodb.conf

关闭

怎么关闭 mongoDB?千万不要 kill -9 pid,能够 kill -2 pid 或 db.shutdownServer()

其实建议使用supervisor管理启动,配置以下

[program:mongodb]
command=/home/waimaiw/mongodb/bin/mongod --config
/home/waimaiw/mongodb/conf/mongodb.conf
directory=/home/waimaiw/mongodb
autostart=true
user=waimaiw


有两个警告
** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
** We suggest setting it to 'never'
** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
** We suggest setting it to 'never'
解决办法
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never> /sys/kernel/mm/transparent_hugepage/defrag

使用supervisor的话 要去掉 配置文件folk这行参数.

2、权限

mongo3.0之后 权限管理有很大变化,不懂得建议看官放文档,其余百度谷歌各类教程的基本还都是2.x的方式。

第一次启动不要加--auth参数

这样默认的启动是没有密码的,做为一个运维这是不能容忍的,因此先配置权限

use admin
db.createUser(
    {
        user: "waimaiw",
        pwd: "waimaiw",
        roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
    }
)

查看用户
show users

db.system.users.find()

这里说明一下,mongodb的每个数据库都要单独的权限

下次启动的时候就加上--auth参数,如今一些操做就须要你输入用户名和密码了
以下

use admin
db.auth("waimaiw",waimaiw)

返回1,就说明认证成功

或者这样登陆也能够

/home/waimaiw/mongodb/bin/mongo -u waimaiw -p waimaiw --authenticationDatabase admin

3、使用

经过/home/waimaiw/mongodb/bin/mongo 进入mongodb的shell

mongo的shell 是js的,因此能够进行简单的运算

有权限的认证下权限,而后
show dbs

会显示以下

注意: 没有插入数据的库是不会显示的

另外mongo建立数据库的命令 use 库名 若是没有这个库 就会建立一个数据库

删除数据库:

db.dropDatabase()

mongo的表也叫文档,mongo的文档不须要建立字段,而且相同的字段可使用不一样的类型,这也是mongo和关系型书库最大的区别

须要注意的是:

  • mongo中键值都是有序的
  • mongo类型区分大写和小写
  • mongo中不能有重复的键

集合

集合在mongodb中至关于关系型数据库的表

createCollection() 方法

MongoDB db.createCollection(name, options) 是用来建立集合.

集合在mongodb能够建立和能够不建立

直接使用命令

db.lala.insert({"name":"sunhong"})

就能够常见一个名叫lala的集合,并将数据插入

也能够建立

db.createCollection("diandongche")

也能够加上参数

db.createCollection("baowenxiang",{ capped : true, autoIndexID : true, size : 6142800, max : 10000 })

参数说明

字段 类型 描述
capped Boolean (可选)若是为true,则启用封顶集合。封顶集合是固定大小的集合,会自动覆盖最先的条目,当它达到其最大大小。若是指定true,则须要也指定尺寸参数。
autoIndexID Boolean (可选)若是为true,自动建立索引_id字段的默认值是false。
size number (可选)指定最大大小字节封顶集合。若是封顶若是是 true,那么你还须要指定这个字段。
max mubmer (可选)指定封顶集合容许在文件的最大数量。

检查集合

show collections

删除集合

db.COLLECTION_NAME.drop()

文档

文档至关于关系型数据库中的表的行,也就是记录

插入文档在说集合的时候说了点

db.lala.insert({"name":"sunhong"})

mongodb的数据格式都是键值的方式存储,因此放在大括号里,这有点像Python的字典

查询文档

不一样于关系型数据库,mongodb的查询关键字是find,语法以下

db.COLLECTION_NAME.find()

find() 方法将在非结构化的方式显示全部的文件。 若是显示结果是格式化的,那么能够用pretty() 方法。

db.COLLECTION_NAME.find().pretty()

不过这在mongodb3.x中好像不太好用

RDBMS Where子句等效于MongoDB
操做 语法 示例 RDBMS等效语句
Equality {<key>:<value>} db.mycol.find({"by":"yiibai tutorials"}).pretty() where by = 'yiibai tutorials'
Less Than {<key>:{$lt:<value>}} db.mycol.find({"likes":{$lt:50}}).pretty() where likes < 50
Less Than Equals {<key>:{$lte:<value>}} db.mycol.find({"likes":{$lte:50}}).pretty() where likes <= 50
Greater Than {<key>:{$gt:<value>}} db.mycol.find({"likes":{$gt:50}}).pretty() where likes > 50
Greater Than Equals {<key>:{$gte:<value>}} db.mycol.find({"likes":{$gte:50}}).pretty() where likes >= 50
Not Equals {<key>:{$ne:<value>}} db.mycol.find({"likes":{$ne:50}}).pretty() where likes != 50
AND 在 MongoDB

mongodb中没有and关键字,而是使用逗号“,”来链接条件的,以下

db.mycol.find({key1:value1, key2:value2}).pretty()
OR 在 MongoDB

mongodb中的or的用法也不太同样,变成了$or 用法以下

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

更新文档

MongoDB的update()和save()方法用于更新文档到一个集合。 update()方法将现有的文档中的值更新,而save()方法使用传递到save()方法的文档替换现有的文档。

update()方法的基本语法以下

db.COLLECTION_NAME.update(SELECTIOIN_CRITERIA, UPDATED_DATA)

mongodb 的 save()方法以下所示的基本语法:

db.COLLECTION_NAME.save({_id:ObjectId(),NEW_DATA})
删除文档

MongoDB 的 remove()方法用于从集合中删除文档。remove()方法接受两个参数。一个是标准缺失,第二是justOne标志

  • deletion criteria : 根据文件(可选)删除条件将被删除。
  • justOne : (可选)若是设置为true或1,而后取出只有一个文档。

remove()方法的基本语法以下

db.COLLECTION_NAME.remove(DELLETION_CRITTERIA)

只删除一个

db.COLLECTION_NAME.remove(DELETION_CRITERIA,1)

删除全部

db.mycol.remove({})

基本的差很少这么多了,之后再深刻学习。