MongoDB 索引结构

1 篇文章 0 订阅
1 篇文章 0 订阅
本文深入探讨了MongoDB的索引数据结构,重点介绍了复合索引,并详细阐述了$push、$addToSet和$pull操作符的用法。同时,文章详细解析了MongoDB的事务特性,包括原子性、持久性、隔离性和一致性。此外,还分享了在查询单值数组和内嵌文档数组时的具体场景和实例,帮助理解如何高效查询。
摘要由CSDN通过智能技术生成

索引数据结构

复合索引数据结构

MongoDB符合索引

$操作符

$push

向数组尾部增加指定的值

{ $push: { <field1>: <value1>, ... } }

如果数组中是内嵌文档元素,需要使用.号操作;
Notice:

  1. 对于指定的文档中,push对应的field不存在时,MongoDB会为该文档新增此字段并执行插入操作;
  2. 如果指定的filed字段本身不是array类型,更新操作将会执行失败;
  3. 如果插入的value本身是一个数组,单纯使用 p u s h 操 作 , 会 将 整 个 数 组 作 为 一 个 元 素 插 入 进 f i l e d 中 ; 如 果 希 望 将 v a l u e 中 每 个 元 素 单 独 插 入 到 f i l e d 中 , 需 要 使 用 push操作,会将整个数组作为一个元素插入进filed中;如果希望将value中每个元素单独插入到filed中,需要使用 pushfiledvaluefiled使each配合完成操作;
  4. 指定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}

... 未完待续

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值