$not

  • $not

    • 语法:{ field: { $not: { <operator-expression> } } }

$not对指定的<operator-expression>执行逻辑NOT操作,并选择不匹配<operator-expression>的文档。这包括不包含field的文档。

请考虑以下查询:

db.inventory.find( { price: { $not: { $gt: 1.99 } } } )

此查询将选择inventory集合中的所有文档,其中:

  • price field value 小于或等于1.99

  • price字段不存在

{ $not: { $gt: 1.99 } }与$lte operator 不同。 { $lte: 1.99 }仅返回price字段存在且 value 小于或等于1.99的文档。

请记住,$not operator 仅影响其他 operators,不能独立检查字段和文档。因此,使用$not operator 进行逻辑析取,使用$ne operator 直接测试字段的内容。

使用$not operator 时请考虑以下行为:

  • $not operator 的操作与其他 operators 的行为一致,但可能会因某些数据类型(如数组)而产生意外结果。

  • $not operator 不会**支持$regex operator 的操作。而是使用//或在驱动程序接口中,使用您的语言的正则表达式功能来创建正则表达式 objects。

请考虑以下使用 pattern match 表达式//的 example:

db.inventory.find( { item: { $not: /^p.*/ } } )

查询将选择inventory集合中item字段 value 不以字母p开头的所有文档。

如果您正在使用 Python,您可以使用 PyMongo 驱动程序和 Python 的python:re.compile()方法编写上述查询来编译正则表达式,如下所示:

import re
for noMatch in db.inventory.find( { "item": { "$not": re.compile("^p.*") } } ):
    print noMatch

也可以看看
find(),update(),$set,$gt,$regex,PyMongo,司机。