跳到主要内容

查询操作符

2025年02月26日
柏拉文
越努力,越幸运

前言


查询操作符

一、对比


1.1 $eq

$eq 匹配等于指定值的值。

1.2 $gt

$gt 匹配大于指定值的值。

1.3 $lt

$lt 匹配小于指定值的值。

1.4 $in

$in 匹配数组中指定的任何值。

1.5 $ne

$ne 匹配所有不等于指定值的值。

1.6 $gte

$gte 匹配大于等于指定值的值。

1.7 $lte

$lte 匹配小于等于指定值的值。

1.8 $nin

$nin 不匹配数组中指定的任何值。

二、逻辑


2.1 $or

$or 使用逻辑 OR 连接多个查询子句会返回符合任一子句条件的所有文档。

2.2 $and

$and 使用逻辑 AND 连接查询子句将返回与两个子句的条件匹配的所有文档。

2.3 $not

$not 反转查询谓词的效果,并返回与查询谓词不匹配的文档。

2.4 $nor

$nor 使用逻辑 NOR 的联接查询子句会返回无法匹配这两个子句的所有文档。

三、字段


3.1 $type

$type 如果字段为指定类型,则选择文档。

3.2 $exists

$exists 匹配具有指定字段的文档。

四、求值


4.1 $mod

$mod 对字段值执行模运算,并选择具有指定结果的文档。

4.2 $expr

$expr 允许在查询语言中使用聚合表达式。当 $expr 出现在属于 $lookup 子管道的 $match 阶段时, $expr 可以引用 $lookup 阶段定义的 let 变量。

语法

{ $expr: { <expression> } }
  • 参数可以是任何有效的表达式。

用法

使用 $expr 来使用聚合表达式, 比较同一文档中的两个字段: 使用 $expr 可以使用聚合表达式, 进而可以访问同文档中的字段值, 来比较同一文档中的两个字段。

db.monthlyBudget.insertMany( [
{ _id : 1, category : "food", budget : 400, spent : 450 },
{ _id : 2, category : "drinks", budget : 100, spent : 150 },
{ _id : 3, category : "clothes", budget : 100, spent : 50 },
{ _id : 4, category : "misc", budget : 500, spent : 300 },
{ _id : 5, category : "travel", budget : 200, spent : 650 }
] );

db.monthlyBudget.find( { $expr: { $gt: [ "$spent" , "$budget" ] } } ); // 以下操作使用 $expr 来查找 spent 金额超过 budget 的文档。 注意: 这里的 $gt 不是查询操作符, 是聚合操作符。

4.3 $text

$text 执行文本搜索。$text 提供了自管理(非 Atlas)部署的文本查询功能。对于托管在 MongoDB Atlas 上的数据,MongoDB 提供了一种改进的全文查询解决方案,Atlas Search

4.4 $regex

$regex 选择值匹配指定正则表达式的文档。

4.5 $where

$where 匹配满足 JavaScript 表达式的文档。

4.6 $jsonSchema

$jsonSchema 根据给定的 JSON 模式验证文档。

五、数组


5.1 $all

$all 匹配包含查询中指定的所有元素的数组。

5.2 $size

$size 如果数组字段达到指定大小,则选择文档。

5.3 $elemMatch

$elemMatch 如果数组字段中的元素与所有指定的 $elemMatch 条件均匹配,则选择文档。

六、投影


6.1 $

$ 对数组中与查询条件匹配的第一个元素进行投影。

6.2 $meta

$meta 预测在 $text 操作中分配的文件分数。

6.3 $slice

$slice 限制从数组中投影的元素数量。支持跳过切片和对切片进行数量限制。

6.4 $elemMatch

$elemMatch 对数组中与指定 $elemMatch 条件匹配的第一个元素进行投影。

七、地理空间


7.1 $near

返回接近某个点的地理空间对象。需要地理空间索引。2dsphere2d 索引支持 $near

7.2 $geoWithin

$geoWithin 选择在边界 GeoJSON 几何图形内的几何图形。2dsphere2d 索引支持 $geoWithin

7.3 $nearSphere

$nearSphere 返回与球面上的某个点接近的地理空间对象。需要地理空间索引。2dsphere2d 索引支持 $nearSphere

7.4 $geoIntersects

$geoIntersects 选择与 GeoJSON 几何图形相交的几何图形。2dsphere 索引支持 $geoIntersects