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

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

$nin

$nin 选择满足以下条件的文档:

  • 指定的字段值不在指定的数组中,也不在

  • 指定的字段不存在。

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

  • MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本

  • MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本

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

{ field: { $nin: [ <value1>, <value2> ... <valueN> ] } }

如果field有一个数组,则 $nin 操作符会选择field 包含数组的文档,该数组中没有与指定数组中的值相等的元素。例如<value1><value2>等等。

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

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

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

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

以下示例针对 genres数组中没有 "Drama" 的电影,将 exclude字段设置为 true

db.movies.updateMany(
{ genres: { $nin: [ "Drama" ] } },
{ $set: { exclude: true } }
)
{
acknowledged: true,
insertedId: null,
matchedCount: ...,
modifiedCount: ...,
upsertedCount: 0
}

updateMany() 还会在文档不包含 $nin 所匹配的字段时选择该文档。

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

后退

$ne

在此页面上