文档菜单
文档首页
/
MongoDB 手册
/ / / /

$nin

本页内容

  • 兼容性
  • 语法
  • 示例
$nin

$nin 选取那些指定字段的值不在指定数组中的文档

  • 或者

  • 指定字段不存在。

您可以使用 $nin 在以下环境中部署

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

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

$nin 操作符具有以下形式

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

如果 field 存储一个数组,那么 $nin 操作符将选择那些 field 存储的数组中不包含指定数组中任何值的文档(例如,<value1><value2> 等)。

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

创建 inventory 集合

db.inventory.insertMany( [
{ "item": "Pens", "quantity": 350, "tags": [ "school", "office" ] },
{ "item": "Erasers", "quantity": 15, "tags": [ "school", "home" ] },
{ "item": "Maps", "tags": [ "office", "storage" ] },
{ "item": "Books", "quantity": 5, "tags": [ "school", "storage", "home" ] }
] )

以下查询选择所有来自 inventory 集合且 quantity 不等于 5 或 15 的文档。

查询还匹配没有 quantity 字段的文档。

db.inventory.find( { quantity: { $nin: [ 5, 15 ] } }, { _id: 0 } )

示例输出

{ item: 'Pens', quantity: 350, tags: [ 'school', 'office' ] },
{ item: 'Maps', tags: [ 'office', 'storage' ] }

对于没有 "school" 标签的文档,将 exclude 字段设置为 true

db.inventory.updateMany(
{ tags: { $nin: [ "school" ] } },
{ $set: { exclude: true } }
)

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

不等号操作符 $nin 并不十分具有选择性,因为它通常会匹配索引的大部分。因此,在许多情况下,带索引的 $nin 查询可能并不会比必须扫描集合中所有文档的 $nin 查询表现更好。另请参阅 查询选择性。

提示

另请参阅

返回

$ne