$ne
定义
$ne
$ne
选择指定字段的值不等于指定值的文档。这包括不包含指定字段的文档。有关不同BSON类型值的比较,请参阅指定的BSON比较顺序。
兼容性
可以使用 $ne
查找托管在以下环境中的部署:
MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
语法
$ne
操作符采用以下形式:
{ field: { $ne: value } }
注意
如果$ne
操作符的值为 null,请参阅非相等筛选器以了解更多信息。
示例
以下示例使用 inventory
集合。要创建集合,请在 mongosh
中运行以下 insertMany()
命令:
db.inventory.insertMany( [ { "item": "nuts", "quantity": 30, "carrier": { "name": "Shipit", "fee": 3 } }, { "item": "bolts", "quantity": 50, "carrier": { "name": "Shipit", "fee": 4 } }, { "item": "washers", "quantity": 10, "carrier": { "name": "Shipit", "fee": 1 } } ] )
匹配不相等的文档字段
选择 inventory
集合中 quantity
不等于 20
的所有文档:该查询还会选择没有 quantity
字段的文档:
db.inventory.find( { quantity: { $ne: 20 } } )
{ _id: ObjectId("61ba667dfe687fce2f042420"), item: 'nuts', quantity: 30, carrier: { name: 'Shipit', fee: 3 } }, { _id: ObjectId("61ba667dfe687fce2f042421"), item: 'bolts', quantity: 50, carrier: { name: 'Shipit', fee: 4 } }, { _id: ObjectId("61ba667dfe687fce2f042422"), item: 'washers', quantity: 10, carrier: { name: 'Shipit', fee: 1 } }
与该查询等效的 SQL 是:
SELECT * FROM INVENTORY WHERE QUANTITIY != 20
基于不相等嵌入式文档字段的更新
以下示例根据与嵌入式文档中的字段进行的 $ne
比较设置 price
字段。updateMany()
操作搜索 carrier
嵌入式文档,其中包含一个名为 fee
的子字段。该操作使用 $set
将 fee
值不等于 1
或 fee
子字段不存在的每个文档中的 price
字段更新为 9.99
:
db.inventory.updateMany( { "carrier.fee" : { $ne: 1 } }, { $set: { "price": 9.99 } } )
{ _id: ObjectId("61ba66e2fe687fce2f042423"), item: 'nuts', quantity: 30, carrier: { name: 'Shipit', fee: 3 }, price: 9.99 }, { _id: ObjectId("61ba66e2fe687fce2f042424"), item: 'bolts', quantity: 50, carrier: { name: 'Shipit', fee: 4 }, price: 9.99 }, { _id: ObjectId("61ba66e2fe687fce2f042425"), item: 'washers', quantity: 10, carrier: { name: 'Shipit', fee: 1 } }
与该查询等效的 SQL 是:
UPDATE INVENTORY SET PRICE = '9.99' WHERE carrierfee != 1
一般不会 选择不等于操作符 $ne
,因为它通常匹配索引的大部分内容。因此,在很多情况下,具有索引的 $ne
查询的性能可能并不比必须扫描集合中的所有文档的 $ne
查询好。另请参阅查询选择性。