Warning: Undefined array key "HTTP_REFERER" in
/www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line
58
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章 应用举例