文档
- 文档是键值对的一个有序集合
- 文档的键是字符串
– 键不能含有 \0(空字节);用于表示键的结尾
– . 和$ 具有特殊意义,在特点环境下使用 ,默认被保留 - 区分大小写,区分类型
– {“test”:6,”test”:”6”,”Test”:6} 是不同的 - 文档中的键/值对是有序的
– {‘x’:1,’y’:2}与{‘y’:2,’x’:1}是不同的
集合
- 集合是一组文档,(视作一张表)
- 集合是动态模式(集合里的文档格式不统一)
- 尽管集合对文档美要求,但是还是需要把 相关文档组织在一起,(便用使用,管理)
- 不能以空字符 和包含\0 z字符命名
- “system”位保留字段
- “$” 应避免使用,系统默认生成集合中会有使用(便于区分)
- 子集合,习惯使用 “.“不同命名空间分割 ,(a.user和a.msg)
数据库
- 多个集合组成数据库。MongoDB实例可以承载多喝数据库
- 使用ASCII中的字母和数字命名 ,使用小写,最多64字节
- 保留数据库名 admin , local , config
shell
MongDB 自带JavaScript shell
先运行MongDB,命令 ‘mongo’ 启动shell
shell 文档基本操作 增删改查
操作 | 方法 | 实例 | 备注 |
---|---|---|---|
增加 | insert | db.c.insert({‘user’:’zhe’,’age’:17,’dec’:’I am a boy’}) | |
批量插入 | insertMany | db.c.insert([]) | 3.2+ |
读取 | find/findOne | db.c.find()/db.c.findOne | |
更新 | update | db.c.update(a,b) | |
更新 | upsert | db.c.update(a,b,true) | update的第三个参数为 true 就是 upsert |
多个文档更新 | update | db.c.update(a,b,true,true) | update的第四个参数为 true 更新 所有匹配的文档 |
删除文档 | remove | db.c.remove(a) | |
清空集合 | drop | db.c.drop() | 不指定条件 |
保存 | save | db.c.save(a) | a文档存在则更新,不存在则创建 |
_id 和ObjectId
文档必须有一个 “_id“ 键,键值可以是任何类型,默认位 ObjectId。
ObjectId 使用12字节的存储空间,由24个十六机制的数字表示
ObjectId的生成方式
字节位置 | 代表意义 | 解释补充 |
---|---|---|
1-4 | 时间戳 | 标准纪元开始时间,单位秒 |
5-7 | 机器 | 主机名的hash |
8-9 | PID | 进程表识符 |
10-12 | 计数器 | 自动增加计数器,确保相同进程同一秒产生的OjectId不同 |