MongoDB link
基本知识
- db.createCollection(“runoob”)
- db.collection.drop()
- db.mycol2.insert({“name” : “菜鸟教程”}) 自动创建
- insert() insertMany() 主键已经存在Exception
- db.col.update({‘title’:‘MongoDB 教程’},{$set:{‘title’:‘MongoDB’}},{multi:true})
- $type 过滤字段类型
- db.col.remove({‘title’:‘MongoDB 教程’})
- db.collection.find(query, projection)
- db.col.find({“likes”:{$lt:50}}).pretty()
- db.col.find({key1:value1, key2:value2}).pretty() and条件
- db.col.find({$or:[{“by”:“菜鸟教程”},{“title”: “MongoDB 教程”}]}).pretty() or条件
- Skip() Limit() 分页
- sort() 1升-1降
- db.values.createIndex({open: 1, close: 1}, {background: true}) 1升-1降
- db.mycol.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", num_tutorial : {$sum : 1}}}]) 聚合group by count(*)
- 主从复制
- 分片
- mongodump -h dbhost -d dbname -o dbdirectory 备份
- mongorestore -h <:port> -d dbname
恢复 - 单字段索引,混合索引不支持
高级
- MongoDB 关系
- 嵌入式关系
- 引用式关系
- 手动引用
- DBRefs
- $ref:集合名称
- $id:引用的id
- $db:数据库名称 可选参数
- 不支持事务
- 原子操作 保存 修改 删除等
- ObjectId
- MongoDB中存储的文档必须有一个"_id"键
- ObjectId 是一个12字节 BSON 类型数据
- 不需要为你的文档保存时间戳字段 ObjectId(“5349b4ddd2781d08c09890f4”).getTimestamp()可以返回时间
- Map Reduce
将大批量的工作(数据)分解(MAP)执行,然后再将结果合并成最终结果(REDUCE) - 全文检索
全文检索对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式- 全文索引
- 正则表达式
- GridFS(如:图片、音频、视频等)
- 固定集合(如:图片、音频、视频等)
像一个环形队列,当集合空间用完后,再插入的元素就会覆盖最初始的头部的元素
索引
- 高级索引
- 索引数组字段 db.users.ensureIndex({“tags”:1}) 会自动为数组中字段建立单独的索引
- 索引子文档字段 手动建立多个索引 db.users.ensureIndex({“address.city”:1,“address.state”:1,“address.pincode”:1}) 查询表达不一定遵循指定的索引的顺序,mongodb 会自动优化
- 内存(RAM)
- 由于索引是存储在内存(RAM)中,你应该确保该索引的大小不超过内存的限制
- 如果索引的大小大于内存的限制,MongoDB会删除一些索引,这将导致性能下降
- 查询限制
- 正则表达式及非操作符,如 $nin, $not, 等
- 算术运算符,如 $mod, 等
- $where 子句
- 索引键限制
- 如果现有的索引字段的值超过索引键的限制,MongoDB中不会创建索引
- 覆盖索引查询
- 查询分析
- db.users.find({gender:“M”},{user_name:1,_id:0}).explain()
- explain()
- hint()