文章目录
$filter
聚合运算符按照指定的条件返回数组的一个子集,返回数组的所有元素都要满足指定的条件,并按照原顺序返回。
语法
{
$filter:
{
input: <array>,
as: <string>,
cond: <expression>,
limit: <number expression>
}
}
参数字段说明:
字段 | 说明 |
---|---|
input |
可被解析为数组的表达式 |
as |
可选,代表输入数组元素的变量名称,如果不指定,默认的名称为this ,变量可以在条件中引用 |
cond |
逻辑表达式,用来判断数组元素是否符合条件,可以引用as 指定的名称来访问数组的每个元素 |
limit |
可选,数值表达式用来限制返回元素的数量,其值必须必须大于等于1,匹配的数组元素按照原有的顺序返回。如果limit 的值大于匹配的数组元素数量或为null ,将返回全部符合条件的元素 |
使用
举例说明几种情况
不指定limit
{
$filter: {
input: [ 1, "a", 2, null, 3.1, NumberLong(4), "5" ],
as: "num",
cond: {
$isNumber: "$$num" }
}
}
结果:
[ 1, 2, 3.1, NumberLong(4) ]
指定limit为常量
{
$filter: {
input: [ 1, "a", 2, null, 3.1, NumberLong(4), "5" ],
as: "num",
cond: {
$isNumber: "$$num" },
limit: 2
}
}
结果:
[ 1, 2 ]
指定limit为表达式
{
$filter: {
input: [ 1, "a", 2, null, 3.1, NumberLong(4), "5" ],
as: "num",
cond: {
$isNumber: "$$num" },
limit: {
$add: [ 0, 1 ] }
}
}
结果:
[1]
举例
使用下面的脚本创建sales
集合:
db.sales.insertMany