索引数据结构
复合索引数据结构
$操作符
$push
向数组尾部增加指定的值
{ $push: { <field1>: <value1>, ... } }
如果数组中是内嵌文档元素,需要使用.
号操作;
Notice:
- 对于指定的文档中,push对应的field不存在时,MongoDB会为该文档新增此字段并执行插入操作;
- 如果指定的filed字段本身不是array类型,更新操作将会执行失败;
- 如果插入的value本身是一个数组,单纯使用 p u s h 操 作 , 会 将 整 个 数 组 作 为 一 个 元 素 插 入 进 f i l e d 中 ; 如 果 希 望 将 v a l u e 中 每 个 元 素 单 独 插 入 到 f i l e d 中 , 需 要 使 用 push操作,会将整个数组作为一个元素插入进filed中;如果希望将value中每个元素单独插入到filed中,需要使用 push操作,会将整个数组作为一个元素插入进filed中;如果希望将value中每个元素单独插入到filed中,需要使用each配合完成操作;
- 指定field中下标地址进行插入,可以使用
$postions
配合完成;
$addToSet
向数组插入一个值,可以将数组字段当做集合来操作,避免数组中的元素重复;
$pull
https://docs.mongodb.com/manual/reference/operator/update/pull/
删除数组字段中的指定元素,配合 i n 使 用 , 可 以 达 到 批 量 删 除 的 效 果 , in使用,可以达到批量删除的效果, in使用,可以达到批量删除的效果,pull可以作用到多个数组字段;
事务
原子性
一个事务被称为是原子的:从其他事务的角度来看,它要么整个发生,要么完全不发生;
持久性
我们同样希望能保证一旦一个事务被数据库系统完成并认可,它就被永久地记录下来且即便其后发生崩溃也不会被丢失;
隔离型
当多个事务并发运行时,每一个都不能看到其他事务未完成的修改。一个事务所做的更新在它完成之前对于其他事务是不可见的,而之后所有的更新将同时变得可见。
一致性
事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
查询场景
查询单值数组
查询数组中必须包含某个值
假设在orders集合中,文档包含tags数组字段,现在需要查询tags数组字段中包含red元素的所有文档,那么搜索条件可以写为:
{"tags":"red"}
查询内嵌文档数组
查询对象数组中包含某个对象字段必须等于某个值
假设在lessons集合中,文档包含一个booked_people对象数组字段,对象包含user_id、is_noticed两个字段,现在需要查询booked_people数组中元素对象上user_id为1的所有文档;
{"booked_people.user_id":1}
... 未完待续