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:\sdk\MongoDB\Server\3.2\bin路径追加到变量值中(mongodb中的bin目录),确保与之前的路径之间有个分号; 例如: D:\sdk\nodejs;D:\sdk\MongoDB\Server\3.2\bin 其中,nodejs后面有个分号把mongodb的路径隔离开 - 创建数据存放文件夹D:\sdk\MongoDB\db - 修改mongoStart.bat文件的路径 - 启动数据库3.数据库组成 - 数据库 - 集合:可以理解为数组 - 文档(bson):可以理解为对象 - key-val:可以理解为对象的属性4.数据类型5.mongo shell5.数据库操作 - 连接到数据库: 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.权限