mongodb入门教程
title: mongodb入门教程
date: 2016-04-06 14:47:18
tags:
为什么要认识呢,因为这玩意就一傻逼
借用一下百科的介绍
MongoDB
是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
蛋疼的就是这个介于。。。之间,既不能把它当成关系型数据库也不能当做非关系型数据库,具体哪里不爽下面慢慢介绍
一、安装
下载 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.2.4.tgz
解压 然后复制到主程目录
rsync -a * /home/waimaiw/mongodb && cd /home/waimaiw/mongodb && mkdir conf data logs
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入门教程的更多相关文章
- mongodb入门教程二
title: mongodb入门教程二 date: 2016-04-07 10:33:02 tags: --- 上一篇文章说了mongodb最基本的东西,这边博文就在深入一点,说一下mongo的一些高 ...
- MongoDb 入门教程
MongoDb 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 它是可扩展的高性能数据存储解决方案,经常被用于非关系型数据的存储,能存储海量的数据. 常 ...
- .NET平台下使用MongoDB入门教程
适合人群:完全没有接触MongoDB或对MongoDB有一点了解的C#开发人员.因为本文是一篇入门级的文章. 一.了解MongoDB MongoDB是一个基于分布式文件存储的数据库.由C++语言编写 ...
- 转 【.NET平台下使用MongoDB入门教程】
目录 一.了解MongoDB 二.MongoDB特点 三.安装及常用命令 3.1 下载安装 3.2 启动服务器 3.3 常用操作 3.4 其他命令 3.5 做成windows服务 四.批处理程序开启M ...
- 简明 MongoDB 入门教程
MongoDB 是免费开源的跨平台 NoSQL 数据库,命名源于英文单词 humongous,意思是「巨大无比」,可见开发组对 MongoDB 的定位.与关系型数据库不同,MongoDB 的数据以类似 ...
- MongoDB入门教程三[数据类型]
MongoDB的文档使用BSON(Binary JSON)来组织数据,BSON类似于JSON,JSON只是一种简单的表示数据的方式,只包含了6种数据类型(null.布尔.数字.字符串.数组及对象),不 ...
- MongoDB入门教程二[MongoDB Shell 简介与使用]
MongoDB Shell 是MongoDB自带的JavaScript Shell,随MongoDB一同发布,它是MonoDB客户端工具,可以在Shell中使用命令与MongoDB实例交互,对数据库的 ...
- MongoDB入门教程一[文档与集合]
MongoDB 是面向集合存储的文档型数据库,其涉及到的基本概念与关系型数据库相比有所不同.举个例子,在关系型数据库中,我们记录一个订单的信息,通常是这样设计表结构的: 设计一个订单基本信息表和一个订 ...
- MongoDb 快速入门教程
文章首发于[博客园-陈树义],点击跳转到原文MongoDb 快速入门教程. MongoDb 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 它是可扩展的 ...
随机推荐
- phpMemcache消息队列类
<?php /** * Memcache 消息队列类 */ class QMC { const PREFIX = 'ASDFASDFFWQKE'; /** * 初始化 mc * @staticv ...
- IOS学习:常用第三方库(GDataXMLNode:xml解析库)
IOS学习:常用第三方库(GDataXMLNode:xml解析库) 解析 XML 通常有两种方式,DOM 和 SAX: DOM解析XML时,读入整个XML文档并构建一个驻留内存的树结构(节点树),通过 ...
- MVC form post 传值
http://www.cnblogs.com/firstcsharp/archive/2013/08/05/3238321.html @using (Html.BeginForm())参数示例 MVC ...
- 桌面小部件----LED电子时钟实现
桌面控件是通过 Broadcast 的形式来进行控制的,因此每个桌面控件都对应于一个BroadcastReceiver.为了简化桌面控件的开发,Android 系统提供了一个 AppWidgetPro ...
- nterrupt 和 using 在C51中断中的使用
8051系列MCU的基本结构包括:32个I/O口(4 组8bit 端口):两个16位定时计数器:全双工串行通信:6个中断源(2个外部中断.2个定时/计数器中断.1个串口输入/输出中断),两级中断优先级 ...
- 用JvisualVM监视远程tomcat
在tomcat的catcalina.sh 中java_opts 环境变量中添加以下参数: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmx ...
- !!!全球最流行开源硬件平台!不知道就OUT了!
全球最流行的几个开源硬件平台!不知道就OUT了! 随着物联网的推广和普及,五年内全球会有200亿台智能设备的需求,而如今随着创客概念的兴起,开源硬件也越加的火热,让我们来看看现在都有哪些主流的开源硬件 ...
- HDU_1430——魔板,预处理,康托展开,置换,string类的+操作
Problem Description 在魔方风靡全球之后不久,Rubik先生发明了它的简化版——魔板.魔板由8个同样大小的方块组成,每个方块颜色均不相同,可用数字1-8分别表示.任一时刻魔板的状态可 ...
- tengine rpm制作
最近又在centos6.4下折腾tengine了,刚好不久前看了rpm包的制作方法,所以又有了搞个rpm包的想法. 1 安装centos的开发环境集成包及tengine的依赖包 1 yum group ...
- L - Vases and Flowers - hdu 4614(区间操作)
题意:有两种操作,第一种从A开始插花,如果有花就跳到下一个,然后输出最后一个花瓶的编号,如果花瓶不够把多余的花丢掉.操作2把区间清空 分析:很明显的线段树操作,就是插花的时候麻烦一下,需要先找出来他剩 ...