1. 安装 ① 指定数据库位置 ? mongod.exe --dbpath d:\test\mongodb\data ? 若不指定,默认为c:\data\db\ ② 运行: ? mongod.exe ? 以windows服务运行 安装:>mongod.exe --logpath "mongolog.txt" --install 运行: net start mongodb ? 默认端口:27017 ③ csharp开发文档 (http://www.mongodb.org/display/DOCS/CSharp+Driver+Tutorial#CSharpDriverTutorial-Downloading) ④ 面向文档的非关系数据库主要解决的问题不是高性能的并发读写,而是保证海量数据存储的同时,具有良好的查询性能。 2. 第2章 ① 文档 ? 基本单元是文档,类似于数据库中的行 ? 每个文档都有特殊的键_id,它在文档所处的集合中是唯一的 ? 类似于json,以键值对的形式存在,区分类型与大小写 ? 例:> db.test.save( { "username":"asong",age:15} ) ② 集合 ? 相当于数据库中的表,它里面存储的是“行”文档 ? 多个集合组成数据库 ? 包含的文档数量> db.test.count() ③ 命令操作 ? 插入 > db.test.save( { "username":"asong",age:15} ) > db.test.insert({"a":"b"}) ? db:当前数据库 ? test:当前集合 ? 显示当前数据库的集合:show collections ? 进行插入时,是否成功如重复,默认是没有提示的 ? 查询 > db.text.findOne() > db.test.find() db.test.findOne({"username":"asong"}) ? 更新 db.test.update({"username":"asong"},{"username":"fangfang"}) ? 删除 > db.test.remove({"username":"asong"}) ? >help ? show dbs ? 输入方法不加括号可看源码如:> db.test.update 3. 第3章创建更新删除文档 ① update可以一次改全部数据, 也可修改文档部分数据 ? $inc:自增 不存在则创建 db.it.update({"name":"pdf"},{"$inc":{"age":3}}) ? $set:设置 不存在则创建 db.it.update({"name":"pdf"},{"$set":{"age":3}}) ? c 若没有,则增加此属性,故可用set 完成文档属性的增加 ? $unset:删除属性 db.it.update({"name":"pdf"},{"$unset":{"age":3}}) ② 数组操作 ? 值是一文档类型,如db.it.insert({"person":{"name":"zxs",age:28}}) ? $push:增加修改 db.it.update({"name":"pdf"},{"$push":{"www":{"a":3}}}) ? $pop:删除 ③ upsert:更新,没有则insert,或者用save 4. 第4章 查询 ① db.it.find({"name":"pdf"}) ② db.it.findOne({"_id":ObjectId("506e3f62e4cfb782ba3d4233")}) ③ 返回指定属性字段 ? db.it.find({"name":"pdf"},{"age":1,"skill":1}) ④ 比较运算 ? find({属性:{条件}}) db.test.find({"age":{"$gte":28,"$lte":30}}) ? 运算符 $lt:< $gt:> $lte,$gte:<=,>= ⑤ 逻辑运算 ? OR关系 db.test.find({"$or":[{"age":26},{"age":28}]}) ? IN db.test.find({"age":{"$in":[26,28]}}) ⑥ 正则表达式 ? /正则/ :db.test.find({"name":/aso*|fang*/}) ⑦ 集合遍历 ? > var mycur = db.test.find() > if(mycur.hasNext()) {mycur.next()} ⑧ limit,skip,sort ? sort:排序 1 升序,-1 降序 ? limit:返回几条结果 ? skip:略过几条,返回剩下的 ? > db.test.find().limit(2).skip(1).sort({"name":1}) 5. 第5章 索引 ① 创建:1升序 -1降序 :> db.test.ensureIndex({"name":-1}) ② 唯一索引:> db.test.ensureIndex({"name":-1},{"unique":true}) ③ 执行计划查看:explain() ? > db.test.find({"name":"asong"}).explain() { "cursor" : "BtreeCursor name_1", "nscanned" : 3, "nscannedObjects" : 3, "n" : 3, "millis" : 0, "nYields" : 0, "nChunkSkips" : 0, "isMultiKey" : false, "indexOnly" : false, "indexBounds" : { "name" : [ [ "asong", "asong" ] ] } } > ? 结果 cursor:使用的索引,当为BasicCursor时为全表扫描 nscanned:查找的文档数 n:返回的文档数 millis:查询所用时间 ④ 查看索引:> db.system.indexes.find() ⑤ 删除索引:> db.test.dropIndex({"name":1}) 6. 第6章 聚合 ① > db.test.count() ② > db.test.find().distinct({"name","key":"name"}) ③ MapReduce:映射化简,将任务拆分到多台服务器执行 7. 第7章 进阶指南 ① db.listCommands():查看命令 ② 查看数据库版本及操作系统 ? > db.runCommand({"buildInfo":1}) 8. 第8章 管理 ① 在mongodb启动时,会启动一HTTP服务器 可通过网页查看数据库性能 ? http://localhost:28017/ ② 查看服务器统计信息 ? > db.runCommand({"serverStatus":1}) ? 或者cmd下:mongostat ③ 备份:mongodump 9. 第9章 复制 ① 主从复制 ? 一台主机可跑多个mongodb,测试主从 ? 启动时指定是主还是从 --master ② 副本集 ? 带有故障自动转移的主从复制 10. 第10章 分片 ① 将数据拆分,分散到各服务器上 ② 复制分发配置都很简单,大部分自动化,核心是键值对,非结构化 11. 第11章 应用举例