MongoDB $not 运算符介绍

$not 运算符是 MongoDB 查询语言中的一个操作符,用于在查询中对某个查询条件进行取反操作。它可以对一个条件表达式进行逻辑非(NOT)操作,将查询结果反转。在 MongoDB 中, $not 运算符可以用于任何支持逻辑操作的查询语句中。

语法

$not 运算符的语法格式如下:

{ <field>: { $not: { <operator-expression> } } }

其中,<field> 表示查询的字段名,<operator-expression> 表示需要进行取反操作的查询表达式。可以是任何支持逻辑操作的表达式,如 $eq$ne$lt$lte$gt$gte 等。

使用场景

$not 运算符常用于查询需要满足某些条件之外的结果,或者需要查询某些字段不等于某个特定值的文档。例如,可以使用 $not 运算符来查询 age 字段不等于 18 的文档:

db.users.find({ age: { $not: { $eq: 18 } } })

示例

示例 1:查询某字段不等于特定值的文档

考虑一个包含学生成绩信息的集合 grades,每个文档包含学生的姓名和数学成绩。现在我们需要查询数学成绩不等于 90 分的所有学生信息,可以使用 $not 运算符进行取反查询:

db.grades.find({ math_score: { $not: { $eq: 90 } } })

查询结果如下所示:

{ "_id" : ObjectId("61fc07de414a5a877d4de0d0"), "name" : "Tom", "math_score" : 85 }
{ "_id" : ObjectId("61fc07de414a5a877d4de0d2"), "name" : "Jack", "math_score" : 80 }
{ "_id" : ObjectId("61fc07de414a5a877d4de0d3"), "name" : "Lucy", "math_score" : 92 }
{ "_id" : ObjectId("61fc07de414a5a877d4de0d5"), "name" : "David", "math_score" : 88 }

可以看到,查询结果中只包含数学成绩不等于 90 分的文档。

示例 2:查询某字段不匹配特定正则表达式的文档

假设我们有一个集合 books,其中包含了许多书籍的信息,包括书名、作者、出版社等。现在我们需要查询书名中不包含“MongoDB”关键字的所有书籍信息,可以使用 $not 运算符和正则表达式进行查询:

db.books.find({ title: { $not: /MongoDB/ } })

查询结果如下所示:

{ "_id": ObjectId("602cbef42dcf0c61f6e1a0a1"), "title": "The Art of Computer Programming", "author": "Donald Knuth", "publisher": "Addison-Wesley Professional", "year": 2011 }
{ "_id": ObjectId("602cbf162dcf0c61f6e1a0a2"), "title": "Introduction to Algorithms", "author": "Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein", "publisher": "The MIT Press", "year": 2009 }
{ "_id": ObjectId("602cbf312dcf0c61f6e1a0a3"), "title": "Computer Networks", "author": "Andrew S. Tanenbaum and David J. Wetherall", "publisher": "Pearson Education", "year": 2011 }
{ "_id": ObjectId("602cbf3f2dcf0c61f6e1a0a4"), "title": "Design Patterns: Elements of Reusable Object-Oriented Software", "author": "Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides", "publisher": "Addison-Wesley Professional", "year": 1994 }

通过该查询语句,我们成功查询出了所有书名中不包含“MongoDB”关键字的书籍信息。

结论

$not 运算符可以用于查询不符合特定条件的文档,可以与其他运算符一起使用,非常灵活。需要注意的是, $not 只能用于查询一个条件,如果需要查询多个条件的反向结果,需要使用 $not 运算符。