MongoDB $ne 运算符介绍

在 MongoDB 中, $ne 运算符用于查询不等于指定值的文档。它可以用于查询文档中特定字段的非特定值,也可以用于查询嵌套文档中的非特定值。 $ne 运算符常常与其他运算符一起使用,以便更精确地查询文档。

语法

$ne 运算符的语法如下所示:

{
  field: {
    $ne: value
  }
}

其中,field 表示要查询的字段名,value 表示要查询的值。

使用场景

$ne 运算符可以用于以下场景:

  • 查询指定字段的非特定值:例如,查询所有不等于 5 的评分记录。
  • 查询嵌套文档中的非特定值:例如,查询所有商品中评分不为 5 的商品。

示例

下面我们将给出两个示例,分别演示了如何使用 $ne 运算符查询不等于指定值的文档。

示例 1:查询指定字段的非特定值

假设我们有一个集合 scores,其中包含了多个学生的分数信息,包括学生姓名、课程名称、分数等。现在我们需要查询所有分数不等于 60 的记录,可以使用 $ne 运算符进行查询:

假设集合中有以下数据:

{
  "_id": 1,
  "name": "Alice",
  "course": "Math",
  "score": 75
},
{
  "_id": 2,
  "name": "Bob",
  "course": "English",
  "score": 60
},
{
  "_id": 3,
  "name": "Charlie",
  "course": "Science",
  "score": 80
},
{
  "_id": 4,
  "name": "David",
  "course": "History",
  "score": 85
}

我们可以使用以下命令来查询所有分数不等于 60 的记录:

db.scores.find({ score: { $ne: 60 } })

执行该命令后,返回的结果为:

{
  "_id": 1,
  "name": "Alice",
  "course": "Math",
  "score": 75
},
{
  "_id": 3,
  "name": "Charlie",
  "course": "Science",
  "score": 80
},
{
  "_id": 4,
  "name": "David",
  "course": "History",
  "score": 85
}

说明查询结果中只返回了分数不等于 60 的记录,即 Alice、Charlie 和 David 的记录。

示例 2:查询嵌套字段的非特定值

假设我们有一个集合 products,其中包含了多个商品的信息,包括商品编号、商品名称、商品价格等。其中,每个商品还包含了一个 reviews 数组,用于存储用户对该商品的评价信息。每个评价又包含了一个 rating 字段,用于表示该评价的评分。现在我们需要查询所有评分不为 5 的商品,可以使用 $ne 运算符进行查询。

以下是示例数据:

{
  "product_id": "10001",
  "product_name": "iPhone 12",
  "price": 7999,
  "reviews": [
    {"username": "user1", "rating": 4},
    {"username": "user2", "rating": 3},
    {"username": "user3", "rating": 5},
    {"username": "user4", "rating": 4},
  ]
},
{
  "product_id": "10002",
  "product_name": "MacBook Pro",
  "price": 13999,
  "reviews": [
    {"username": "user1", "rating": 5},
    {"username": "user2", "rating": 4},
    {"username": "user3", "rating": 3},
    {"username": "user4", "rating": 4},
  ]
},
{
  "product_id": "10003",
  "product_name": "AirPods",
  "price": 1199,
  "reviews": [
    {"username": "user1", "rating": 5},
    {"username": "user2", "rating": 4},
    {"username": "user3", "rating": 2},
    {"username": "user4", "rating": 3},
  ]
}

以下为查询语句:

db.products.find({ "reviews.rating": { $ne: 5 } })

以下是查询结果:

{
  "product_id": "10001",
  "product_name": "iPhone 12",
  "price": 7999,
  "reviews": [
    {"username": "user1", "rating": 4},
    {"username": "user2", "rating": 3},
    {"username": "user4", "rating": 4},
  ]
},
{
  "product_id": "10003",
  "product_name": "AirPods",
  "price": 1199,
  "reviews": [
    {"username": "user2", "rating": 4},
    {"username": "user3", "rating": 2},
    {"username": "user4", "rating": 3},
  ]
}

这个查询语句返回了所有评分不为 5 的商品信息。

结论

使用 $ne 运算符可以查询指定字段的非特定值,适用于需要排除特定值的查询场景。在实际应用中,可以通过结合其他查询条件进行更复杂的查询操作,如组合使用 $and$or 运算符等。需要注意的是,在使用 $ne 运算符时,要注意特定值是否存在 null 值的情况,需要结合 $exists 运算符进行处理。