Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs 菜单
Docs 主页
/ /

$ne(查询谓词运算操作符)

$ne

$ne 选择字段值不等于指定值的文档。这包括不包含该字段的文档。

有关不同BSON类型值的比较,请参阅指定的BSON比较顺序。

可以使用 $ne 查找托管在以下环境中的部署:

  • MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务

$ne 操作符采用以下形式:

{ field: { $ne: value } }

注意

如果$ne的值为空,请参阅非等值过滤器。

本页上的示例使用 sample_mflix示例数据集 中的数据。有关如何将此数据集加载到自管理MongoDB 部署中的详细信息,请参阅加载示例数据集。如果对示例数据库进行了任何修改,则可能需要删除并重新创建数据库才能运行本页上的示例。

以下示例返回 runtime 大于 1000 分钟且 rated 不等于 "G" 的电影。由于 $ne 还匹配不包含 rated字段的文档,因此即使评级数据不可用,该查询也会返回电影:

db.movies.find(
{ rated: { $ne: "G" }, runtime: { $gt: 1000 } },
{ _id: 0, title: 1, runtime: 1, rated: 1 }
)
[
{
runtime: 1256,
title: 'Centennial'
},
{
runtime: 1140,
title: 'Baseball',
rated: 'TV-PG'
}
]

以下示例根据与嵌入式文档中的字段进行的$ne 比较设置 highestRated 字段。updateMany() 操作搜索 imdb 嵌入式文档,其中包含一个名为 rating 的子字段。该操作使用 $setrating值不等于 9.3rating子字段不存在的每个文档中的 highestRated 字段更新为 false

db.movies.updateMany(
{ "imdb.rating": { $ne: 9.3 } },
{ $set: { "highestRated": false } }
)
{
acknowledged: true,
insertedId: null,
matchedCount: ...,
modifiedCount: ...,
upsertedCount: 0
}

与该查询等效的 SQL 是:

UPDATE movies SET highestRated = false WHERE imdb_rating != 9.3

不等式操作符 $ne 的选择性不是很高,因为它通常会匹配索引的很大一部分。因此,在许多情况下,带索引的 $ne查询的性能可能并不比必须扫描集合中所有文档的 $ne查询好。请参阅创建选择性查询

比较数组时,$ne 的行为会有所不同,具体取决于您传递的是标量还是数组作为比较值。

  • 标量比较$ne 匹配标量值未作为元素出现在数组中的文档,包括没有字段的文档。

  • 精确数组比较$ne 匹配字段数组与指定数组不同的文档,包括具有不同元素顺序、不同元素数量或缺失字段的文档。

以下示例返回运行时超过 1000 分钟的电影来演示每个行为。

以下示例返回 runtime 大于 1000 分钟且 "Drama" 不是 genres数组的电影:

db.movies.find(
{ genres: { $ne: "Drama" }, runtime: { $gt: 1000 } },
{ _id: 0, title: 1, genres: 1 }
)
[
{
genres: [ 'Documentary', 'History', 'Sport' ],
title: 'Baseball'
}
]

以下示例返回 runtime 大于 1000 分钟且 genres数组不完全等于 [ "Drama" ] 的电影。与标量比较不同,Centennial(与 genres: [ "Action", "Adventure", "Drama" ])会进行匹配,因为该数组与 [ "Drama" ] 不同:

db.movies.find(
{ genres: { $ne: [ "Drama" ] }, runtime: { $gt: 1000 } },
{ _id: 0, title: 1, genres: 1 }
)
[
{
genres: [ 'Action', 'Adventure', 'Drama' ],
title: 'Centennial'
},
{
genres: [ 'Documentary', 'History', 'Sport' ],
title: 'Baseball'
}
]

后退

$lte

在此页面上