版权声明:本文为博主原创文章,未经博主允许不得转载。
为什么要选择mongobg
mongodb是开源的noSQL数据库(NoSQL = Not Only SQL ),也被叫做“芒果数据库”,免费,开源,良好的技术支持。github,淘宝,京东,360,百度都在使用。
NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。
1、基本的用法是存储JSON数据,这很适合JavaScript程序。其特性如下:
- 没有表结构的概念,每条记录可以有完全不同的结构
- 业务开发方便快捷
- sql数据库需要事先定义表结构再使用
2、完全支持索引:
- 单键索引、多建索引
- 数组索引
- 地理位置索引
3、方便的冗余和扩展:
- 数据集保证数据安全
- 分片扩展数据规模
4、良好的支持:
- 完善的文档
- 齐全的驱动支持
搭建简单服务
Mac OX上安装mongodb,mongodb的安装有好多种安装方法,有普通青年的HomeBrew方式,也有文艺青年的源码编译方式。我只想快速的装起来用一下,所以我选最简单的HomeBrew
更新Homebrew的package数据库,在Mac的终端中输入:时间有可能会比较长,没有信息提示,需要耐心等待
$ brew update
开始安装mongodb:然后继续等待mongodb下载完成。这个比较贴心了,有下载进度百分比。
$ brew install mongodb
修改环境变量:
$ touch .base_profile
$ open .base_profile
加入path,保存
export MONGO_PATH=/usr/local/mongodb
export PATH=$PATH:$MONGO_PATH/bin
启动mongodb服务端:
$ mongod --config /usr/local/etc/mongod.conf
$ mongo
(注:mongod.conf文件中bindIp: 127.0.0.1意思是本机访问,如果是外网访问需要重新设置)如果要修改数据库路径的话,终端输入 mongod –dbpath 路径
此时,可以通过http访问该数据库,mongodb使用了27017端口,因此在浏览器中打开http://localhost:27017/。
出现如下提示即说明连接成功了
基本文档的增删改查
| 操作 | 说明 |
|---|---|
| show dbs | 查看目前有多少数据库 |
| show tables | 查看有多少表(集合) |
| show collections | 查看有多少表(集合) |
| use imooc | 切换imooc数据库,没有的话会自动创建 |
| db.imooc_2.insert({x:1}) | 在imooc_2表中插入一条数据x等于1(可以使用js语句循环插入数据) |
| db.imooc_2.find() | 查询imooc_2表中所有数据 |
| db.imooc_2.find({x:1}) | 查询相等于1 的数据 |
| db.imooc_2.find().count() | 计算imooc_2集合中有多少数据 |
| db.imooc_2.find().skip(n) | 查询的时候跳过n条数据 |
| db.imooc_2.find().limit(n) | 查询的时候限制n条数据 |
| db.imooc_2.find().sort({x:1}) | 按x排序 |
| db.imooc_2.find({x:{$gt:100,$lte:120}}) | 查找x大于100小于等于120 的数据 |
| db.imooc_2.update({x:1},{x:999}) | 把x为1 的数据更新为 999 |
| db.imooc_2.update({z:1},{$set:{x:2}}) | 把数据有z为1的数据的x更新为2(及一条数据中的部分更新) |
| db.imooc_2.update({y:2},{y:999},true) | 更新数据库中不存在的数据(及插入一条不存在的数据) |
| db.imooc_2.update({c:1},{$set:{c:2}},false,true) | 更新全部c为1的数据为2,false表示只更新存在的数据,true表示更新全部数据(数据库默认只更新第一条数据) |
| db.imooc_2.remove({c:2}) | 删除c为2的数据(删除是全部的) |
| db.imooc_2.drop() | 删除imooc_2表(集合) |
| db.dropDatabase() | 删除imooc_2数据库 |
$gt ——– greater than >
$gte ——— gt equal >=
$lt ——– less than <
$lte ——— lt equal <=
$ne ———– not equal !=
$eq ——– equal =
各种类型的索引的创建与使用
优点:加快索引相关查询
缺点:增加磁盘消耗,降低写入性能
| 操作 | 说明 |
|---|---|
| 自动生成的唯一的 | _id索引 |
| db.tbname.ensureIndex({x:1/-1}) | 单键索引(1/-1,表示排序) |
| db.tbname.ensureIndex({x:1,y:-1}) | 复合索引 |
| db.tbname.ensureIndex({time: 1},{expireAfterSeconds:30}) | 过期索引(登录用户的记录,必须是时间类型 new Date(),不能使用时间搓) |
| db.page.ensureIndex({title:”text”}) | 全文索引 |
| db.page.find({$text:{$search: “aa”}}) | 全文索引例子 |
| db.page.find({$text:{$search: “aa -cc”}}) | 全文索引例子 |
| db.page.find({$text:{$search: “\”aa\” \”bb\””}}) | 全文索引例子 |
| db.page.find({$text:{$search: “aa”}},{score:{$meta:”textScore”}}).sort({score:{$meta:”textScore”}}) | 全文索引例子 |
| db.location.ensureIndex({w:’2d’}) | 地理位置索引 |
| db.location.find({w:{$near:[1,1]}}) | 地理位置例子 |
| db.location.find({w:{$near:[1,1],$maxDistance:10,$minDistance:1}}) | 地理位置例子 |
| db.location.find({w:{$geoWithin:{$box:[[0,0],[3,3]]}}}) | 地理位置例子 |
| db.location.find({w:{$geoWithin:{$center:[[1,1],2]}}}) | 地理位置例子 |
| db.location.find({w:{$geoWithin:{$polygon:[[0,0],[2,2],[6,1],[10,10]]}}}) | 地理位置例子 |
| db.runCommand({geoNear:”location”,near:[2,2],maxDistance:10,num:2}) | 地理位置例子 |
| db.tbname.dropIndex(‘name’) | 删除索引 |
| db.tbname.ensureIndex({x:1,y:1,z:1},{name:xyz_index}) | 设置索引名字 |
| db.tbname.ensureIndex({x:1},{unique:true}) | 设置索引唯一性 |
| db.tbname.ensureIndex({m :1},{sparse:true}) | 设置索引洗属性(对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。默认值为 false.) |