1.MongoDB介绍(数据库是用来存数据的)
- 特点
- mongodb是nosql(not only sql)数据库中的一种
- 以bson(binary json)文档方式存储数据
- 优点
- 高开发效率:
- 采用bson文档,避免了表(table)和对象(object)的映射
- 使用对象语法,js语法上手容易
- 高性能(查询性能):
- 内存映射:比磁盘io操作快
- 内嵌属性:避免了多表联查
- 高扩展
- 天生分布式数据库,易扩容
- 非结构,可动态的扩展各种属性
- 缺点
- 不支持事务操作
- 占用空间过大
2.安装MongoDB
- 安装过程:next -> 勾上checkbox 再点next -> custom -> browser选择存储mongdodb的磁盘路径 -> next -> install
- 配置环境变量
- 右键我的电脑 -> 属性 -> 左侧高级系统设置 -> 高级菜单最下面的环境变量 -> 找到系统变量中的path
-> 把D:sdkMongoDBServer3.2in路径追加到变量值中(mongodb中的bin目录),确保与之前的路径之间有个分号;
例如:
D:sdk
odejs;D:sdkMongoDBServer3.2in
其中,nodejs后面有个分号把mongodb的路径隔离开
- 创建数据存放文件夹D:sdkMongoDBdb
- 修改mongoStart.bat文件的路径
- 启动数据库
3.数据库组成
- 数据库
- 集合:可以理解为数组
- 文档(bson):可以理解为对象
- key-val:可以理解为对象的属性
4.数据类型
5.mongo shell
5.数据库操作
- 连接到数据库:
var conn = new Mongo("host:port");
- 获取数据库对象(Database对象)
var db = conn.getDB("test");
- 安装好mongodb后,就会自动创建两个库:admin和test
- 删除数据库
db.dropDatabase();
- 还可以使用另外一种方式:
use test;
show dbs;
6.集合操作
- 创建集合
db.createCollection("name");
- 获取集合
db.getCollection("name");
- 删除集合
collections.drop();
7.文档操作
- 增
- collections.insert({name: "zhangsan", age: 18});
- 删
- collection.remove({}) 删除所有,{}是query对象
- collection.remove(query, false)
- true 只删第一个
- false 删除匹配的所有,默认
- 改
- collections.update(query, update, upsert, multi);
- query 查询对象
- update 更改
- upsert
- true 没有匹配的就新增
- false 没有匹配什么都不做
- multi
- true 更新所有匹配文档
- false 值更新第一个文档
eg:
collections.update(
{
name: "zhangsan",
},
{
$inc: {age: 1},
$set: {name: "zhangsandege", sex: "female"},
$push: {phoneNum: "186xxx"},
$sort: {age: 1}
}, false, true);
- 查
- 查询
collections.find({name: "zhangsan"});//{name: "zhangsan"}这个json对象就是query对象
- 游标(数组的引用)
var cursor = studentsColl.find();//查找所有的
- 显示数据
var cursor = studentsColl.find();
cursor.forEach(function(obj) {
printjson(obj);
});
- 限制字段
studentsColl.find(query, {name: 1, age: 0})
- 1 表示显示该属性
- 0 表示去掉该属性
- 统计
cursor.count();
- 排序
cursor.sort({name: 1, age: -1});
- 1 升序
- -1 降序
- 正则
{name: {$regex: /^zhang.{0,}$/}}
- 分页
cursor.limit(num);
- num为限制数量,前三个
cursor.skip(num);
- num为跨过数量
cursor.skip(0).limit(10);
cursor.skip(10).limit(10);
- 去重
collection.distinct("name", {age: 18});
- 第一个参数是指定去重复的那个属性
- 第二个参数是query对象
- 分组
var results = collections.group(
{
key: {name: 1, age: 0},
cond: {},
initial: {count: 0, vowels: 0, consonants: 0},
$reduce: function(obj, prev) {
prev.count++;
prev.vowels += obj.stats.vowels;
prev.consonants += obj.stats.consonants;
},
finalize: function(obj) {
obj.total = obj.vowels + obj.consonants;
}
}
);
- 聚合
collections.aggregate({
{$match: {sex: "male"}},
{$group: {_id: "$className", largest: {$max: "$age"}, smallest: {$min: "$size"}}},
{$sort: {_id: 1}}
});
8.权限