title: mongodb入门教程

date: 2016-04-06 14:47:18

tags:

为什么要认识呢,因为这玩意就一傻逼

借用一下百科的介绍

MongoDB

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

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

一、安装

vim conf/mongodb.conf

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,ip2

配置开机启动

vim /etc/rc.local

/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这行参数.

二、权限

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

三、使用

通过/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({})

基本的差不多这么多了,以后再深入学习。

mongodb入门教程的更多相关文章

  1. mongodb入门教程二

    title: mongodb入门教程二 date: 2016-04-07 10:33:02 tags: --- 上一篇文章说了mongodb最基本的东西,这边博文就在深入一点,说一下mongo的一些高 ...

  2. MongoDb 入门教程

    MongoDb 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 它是可扩展的高性能数据存储解决方案,经常被用于非关系型数据的存储,能存储海量的数据. 常 ...

  3. .NET平台下使用MongoDB入门教程

    适合人群:完全没有接触MongoDB或对MongoDB有一点了解的C#开发人员.因为本文是一篇入门级的文章. 一.了解MongoDB  MongoDB是一个基于分布式文件存储的数据库.由C++语言编写 ...

  4. 转 【.NET平台下使用MongoDB入门教程】

    目录 一.了解MongoDB 二.MongoDB特点 三.安装及常用命令 3.1 下载安装 3.2 启动服务器 3.3 常用操作 3.4 其他命令 3.5 做成windows服务 四.批处理程序开启M ...

  5. 简明 MongoDB 入门教程

    MongoDB 是免费开源的跨平台 NoSQL 数据库,命名源于英文单词 humongous,意思是「巨大无比」,可见开发组对 MongoDB 的定位.与关系型数据库不同,MongoDB 的数据以类似 ...

  6. MongoDB入门教程三[数据类型]

    MongoDB的文档使用BSON(Binary JSON)来组织数据,BSON类似于JSON,JSON只是一种简单的表示数据的方式,只包含了6种数据类型(null.布尔.数字.字符串.数组及对象),不 ...

  7. MongoDB入门教程二[MongoDB Shell 简介与使用]

    MongoDB Shell 是MongoDB自带的JavaScript Shell,随MongoDB一同发布,它是MonoDB客户端工具,可以在Shell中使用命令与MongoDB实例交互,对数据库的 ...

  8. MongoDB入门教程一[文档与集合]

    MongoDB 是面向集合存储的文档型数据库,其涉及到的基本概念与关系型数据库相比有所不同.举个例子,在关系型数据库中,我们记录一个订单的信息,通常是这样设计表结构的: 设计一个订单基本信息表和一个订 ...

  9. MongoDb 快速入门教程

    文章首发于[博客园-陈树义],点击跳转到原文MongoDb 快速入门教程. MongoDb 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 它是可扩展的 ...

随机推荐

  1. cocos2dx lua调用C++类.

    最近需求所迫, 终于着手传说中的 lua 了. 折腾了4天, 总算大概搞明白了用法. 细节咱们就别谈了, 直接说项目里怎么跑起来. 准备工作 我们需要一系列繁琐的前奏. tolua++: 这是必备工具 ...

  2. Python 3中bytes和str的分别

    最近把一段py2的代码转换到py3的代码,结果运行到向socket中写数据的代码部分出现了'str' does not support the buffer interface这样一个错误. 一番搜索 ...

  3. Android单位度量

    px(像素):屏幕上的点. in(英寸):长度单位.mm(毫米):长度单位.pt(磅):1/72英寸.dp(与密度无关的像素):一种基于屏幕密度的抽象单位.在每英寸160点的显示器上,1dp = 1p ...

  4. 【USACO 2.3.3】零数列

    [题目描述] 请考虑一个由1到N(N=3, 4, 5 ... 9)的数字组成的递增数列:1 2 3 ... N. 现在请在数列中插入“+”表示加,或者“-”表示减,“ ”表示空白(例如1-2 3就等于 ...

  5. 多个显示器, window.open的定位

    // Pops a window relative to the current window position function popup(url, winName, xOffset, yOffs ...

  6. 新思路:Exception Handle

    以前提到异常处理,马上就想到加try-catch. 没错,这种应激反应是对的.关键是怎么加? 如果想为每一个方法都加异常处理,输出相同格式的异常信息,应该怎么做呢? 难道是为每一个方法加一个try-c ...

  7. Windows 7如何限制运行特定的应用程序(转载)

    AppLocker即"应用程序控制策略",是Windows 7系统中新增加的一项安全功能. 步骤/方法 1 单击"开始"菜单,单击"控制面板" ...

  8. jdbc 连接mysql Communications link failure的解决办法

    使用Connector/J连接MySQL数据库,程序运行较长时间后就会报以下错误: Communications link failure,The last packet successfully r ...

  9. map 和 reduce

    注意:reduce需要 from functools import reduce map的使用: >>> def func(x): ... return x*x ... >&g ...

  10. Netty笔记--ByteBuf释放

    参考资料:http://www.maljob.com/pages/newsDetail.html?id=394 参考资料:http://www.blogjava.net/liuguly/archive ...