微信小程序数据库SQL

546 阅读7分钟

介绍

本文档仅作为学习记录。

聚合操作

名称描述备注
addFields添加新字段到输出的记录等同于同时指定了所有已有字段和新增字段的 project 阶段
project把指定的字段传递给下一个流水线,指定的字段可以是某个已经存在的字段,也可以是计算出来的新字段。
bucket将输入记录根据给定的条件和边界划分成不同的组,每组即一个 bucket将某个字段按照边界分组
bucketAuto作用同bucket类似,只是无需指定 boundariesbucketAuto。自动将记录平均分散到每组中。包含一个以包含组中最大值和最小值两个字段的对象为值的 _id 字段和一个以组中记录数为值的 count 字段
count计算上一聚合阶段输入到本阶段的记录数,输出一个记录,其中指定字段的值为记录数count 阶段等同于 group + project 的操作
geoNear将记录按照离给定点从近到远输出geoNear 必须为第一个聚合阶段
group将输入记录按给定表达式分组,输出时每个记录代表一个分组,每个记录的 _id 是区分不同组的 key。
limit限制输出到下一阶段的记录数。
lookup联表查询。
match据条件过滤文档,并且把符合条件的文档传递给下一个流水线阶段
replaceRoot指定一个已有字段作为输出的根节点,也可以指定一个计算出的新字段作为根节点
sample随机从文档中选取指定数量的记录。随机获取数据库中一定数量的记录
skip指定一个正整数,跳过对应数量的文档,输出剩下的文档
sort根据指定的字段,对输入的文档进行排序1 代表升序排列(从小到大)-1 代表降序排列(从大到小)
sortByCount根据传入的表达式,将传入的集合进行分组(group)。然后计算不同组的数量,并且将这些组按照它们的数量进行排序,返回排序后的结果表达式的形式是:$ + 指定字段。请注意:不要漏写 $ 符号。
Unwind使用指定的数组字段中的每个元素,对文档进行拆分。拆分后,文档会从一个变为一个或多个,分别对应数组的每个元素
End标志聚合操作定义完成,发起实际聚合操作

Command

数据库操作符,通过 db.command 获取

查询 & 逻辑操作符

名称描述备注
and用于表示逻辑 "与" 的关系,表示需同时满足多个查询筛选条件expressions: any[]
or用于表示逻辑 "或" 的关系,表示需同时满足多个查询筛选条件可跨字段查询
not用于表示逻辑 "非" 的关系,表示需不满足指定的条件
nor用于表示逻辑 "都不" 的关系,表示需不满足指定的所有条件

查询 & 比较操作符

名称描述备注
eq查询筛选条件,表示字段等于某个值。eq 指令比对象的方式有更大的灵活性可以是 number, boolean, string, object, array, Date
neq表示字段不等于某个值。表示字段不等于某个值,和 eq 相反
lt表示需小于指定值。可以传入 Date 对象用于进行日期比较
lte表示需小于或等于指定值
gt表示需大于指定值
gte表示需大于或等于指定值可以传入 Date 对象用于进行日期比较
in表示要求值在给定的数组内value: any[]
nin表示要求值不在给定的数组内找出进度不是 0 或 100 的 todo; _.nin([0, 100])

查询 & 字段操作符

名称描述备注
exists判断字段是否存在value: boolean
mod给定除数 divisor 和余数 remainder,要求字段作为被除数时 value % divisor = remainder参数:divisor: number ,remainder: number

查询 & 数组操作符

名称描述备注
all用于数组字段的查询筛选条件,要求数组字段中包含给定数组的所有元素in操作符适用于比较,all是用于数组
elemMatch用于数组字段的查询筛选条件,要求数组中包含至少一个满足 elemMatch 给定的所有条件的元素普通匹配,则仅需满足查询条件中的一个字段仅可。查看详情
size用于数组字段的查询筛选条件,要求数组长度为给定值

查询 & 表达式操作符

名称描述备注
expr用于在查询语句中使用聚合表达式,方法接收一个参数,该参数必须为聚合表达式;查看详情
  1. expr 可用于在聚合 match 流水线阶段中引入聚合表达式
  2. 如果聚合 match 阶段是在 lookup 阶段内,此时的 expr 表达式内可使用 lookup 中使用 let 参数定义的变量,具体示例可见 lookup指定多个连接条件 例子
  3. expr 可用在普通查询语句(where)中引入聚合表达式

更新 & 字段操作符

名称描述备注
set更新操作符,用于设定字段等于指定值这种方法相比传入纯 JS 对象的好处是能够指定字段等于一个对象
remove用于表示删除某个字段
inc原子操作,用于指示字段自增自增量,可正可负
mul原子操作,用于指示字段自乘某个值自乘量,可正可负
min给定一个值,只有该值小于字段当前值才进行更新
max给定一个值,只有该值大于字段当前值才进行更新
rename字段重命名。如果需要对嵌套深层的字段做重命名,需要用点路径表示法。不能对嵌套在数组里的对象的字段进行重命名

更新 & 数组操作符

名称描述备注
push对一个值为数组的字段,往数组添加一个或多个值。或字段原为空,则创建该字段并设数组为传入值可对插入后的数组进行排序,节选,查看详情
pop对一个值为数组的字段,将数组尾部元素删除
unshift对一个值为数组的字段,往数组头部添加一个或多个值。或字段原为空,则创建该字段并设数组为传入值
shift对一个值为数组的字段,将数组头部元素删除
pull给定一个值或一个查询条件,将数组中所有匹配给定值或查询条件的元素都移除掉可搭配用 elemMatch 查询条件,匹配嵌套在对象数组里面的对象
pullAll给定一个值或一个查询条件,将数组中所有匹配给定值的元素都移除掉。跟 pull 的差别在于只能指定常量值、传入的是数组区别:_.pull(_.in(['database', 'cloud'])). vs _.pullAll(['database', 'cloud'])`
addToSet原子操作。给定一个或多个元素,除非数组中已存在该元素,否则添加进数组。

聚合操作符 $

数据库聚合操作符,通过 db.command.aggregate 获取

算数操作符

名称描述备注
abs返回一个数字的绝对值
add将数字相加或将数字加在日期上
ceil向上取整,返回大于或等于给定数字的最小整数
divide传入被除数和除数,求商
exp取 e(自然对数的底数,欧拉数) 的 n 次方
floor向下取整,返回大于或等于给定数字的最小整数
ln计算给定数字在自然对数值
...

数组操作符

名称描述备注
arrayElemAt返回在指定数组下标的元素db.command.aggregate.arrayElemAt([, ]) 查看详情
arrayToObject将一个数组转换为对象
concatArrays将多个数组拼接成一个数组
filter根据给定条件返回满足条件的数组的子集
in给定一个值和一个数组,如果值在数组中则返回 true,否则返回 falsedb.command.aggregate.in([, ])
indexOfArray在数组中找出等于给定值的第一个元素的下标,如果找不到则返回 -1
isArray判断给定表达式是否是数组,返回布尔值
map类似 JavaScript Array 上的 map 方法,将给定数组的每个元素按给定转换方法转换后得出新的数组