MongoDB 中的 NOT IN 比较运算符
比较运算符在处理大型数据集时非常有用。从数据中获得洞察力是有帮助的。
本文介绍如何在 MongoDB 中使用 $nin
(NOT IN
) 比较运算符。
它还展示了如何在 MongoDB 中将 $nin
与 find()
和 update()
方法一起使用。此外,我们还将学习使用 $nin
运算符的正则表达式。
MongoDB 中的 $nin
(NOT IN
) 比较运算符
$nin
是 MongoDB 中的比较运算符之一。该运算符选择那些字段值不属于指定数组的文档,或者该字段不存在。
如果该字段包含一个数组、文档数组或嵌入文档数组,那么我们将仅获取该字段包含该数组且没有项目等于给定数组中的值的那些文档(我们稍后也会看到这种情况在本教程中)。
在深入了解更多细节之前,让我们创建包含一些文档的示例集合。
示例代码:
db.createCollection('students');
db.students.insertMany([
{
"name": {first: "Mehvish", last: "Ashiq"},
"age": 30,
"gender": "Female",
"discipline": "BSCS",
"joining_year": 2014,
"department": "Computer Science",
"courses":[ "Python","Java", "Machine Learning", "Data Science"],
"contact":[
{ phone: { type: "cell", number: "923042516485" }},
{ mail: { type: "official", email: "mehvishofficial@gmail.com"}}
]
},
{
"name": {first: "Aftab", last: "Raza"},
"age": 25,
"gender": "Male",
"discipline": "BSIT",
"joining_year": 2012,
"department": "Information Technology",
"courses":[ "Python","JavaScript", "Information Security"],
"contact":[
{ phone: { type: "landline", number: "111-444-5555" }},
{ mail: { type: "personal", email: "aftab@hotmail.com"}}
]
}
])
db.students.find().pretty()
输出:
{
"_id" : ObjectId("6298ef54271c5124b739d7d3"),
"name" : {
"first" : "Mehvish",
"last" : "Ashiq"
},
"age" : 30,
"gender" : "Female",
"discipline" : "BSCS",
"joining_year" : 2014,
"department" : "Computer Science",
"courses" : [
"Python",
"Java",
"Machine Learning",
"Data Science"
],
"contact" : [
{
"phone" : {
"type" : "cell",
"number" : "923042516485"
}
},
{
"mail" : {
"type" : "official",
"email" : "mehvishofficial@gmail.com"
}
}
]
}
{
"_id" : ObjectId("6298ef54271c5124b739d7d4"),
"name" : {
"first" : "Aftab",
"last" : "Raza"
},
"age" : 25,
"gender" : "Male",
"discipline" : "BSIT",
"joining_year" : 2012,
"department" : "Information Technology",
"courses" : [
"Python",
"JavaScript",
"Information Security"
],
"contact" : [
{
"phone" : {
"type" : "landline",
"number" : "111-444-5555"
}
},
{
"mail" : {
"type" : "personal",
"email" : "aftab@hotmail.com"
}
}
]
}
文档有点复杂的唯一原因是学习使用 $nin
比较运算符与不同的字段。例如,单个字段、包含嵌入文档的字段、包含数组的字段以及嵌入文档的数组。
在 MongoDB 中使用 $nin
运算符和 find()
方法查询字段
示例代码:
db.students.find({ "joining_year": { $nin: [2011,2014] }}).pretty();
输出:
{
"_id" : ObjectId("6298ef54271c5124b739d7d4"),
"name" : {
"first" : "Aftab",
"last" : "Raza"
},
"age" : 25,
"gender" : "Male",
"discipline" : "BSIT",
"joining_year" : 2012,
"department" : "Information Technology",
"courses" : [
"Python",
"JavaScript",
"Information Security"
],
"contact" : [
{
"phone" : {
"type" : "landline",
"number" : "111-444-5555"
}
},
{
"mail" : {
"type" : "personal",
"email" : "aftab@hotmail.com"
}
}
]
}
在这个例子中,我们使用 $nin
运算符和 find()
方法来搜索 joining_year
既不是 2011
也不是 2014
的整个文档。
如果我们只想拥有某些字段而不是整个文档,我们可以按以下方式使用该命令。写 1
以在计算机屏幕上打印该字段及其值,而 0
表示我们不希望该字段出现在结果集中。
示例代码:
db.students.find(
{ "joining_year": { $nin: [2011,2014] }},
{"name": 1, "discipline": 1, "department": 1, "_id":0}
).pretty();
输出:
{
"name" : {
"first" : "Aftab",
"last" : "Raza"
},
"discipline" : "BSIT",
"department" : "Information Technology"
}
在 MongoDB 中使用 $nin
运算符和 find()
方法查询嵌入式文档
示例代码:
db.students.find(
{ "name.last": { $nin: ["Raza", "Ali"] }},
{ "name": 1, "gender": 1, "age": 1, "_id":0}
).pretty();
输出:
{
"name" : {
"first" : "Mehvish",
"last" : "Ashiq"
},
"age" : 30,
"gender" : "Female"
}
对于本文,示例文档有一个名为 name
的字段,其中还包含具有两个字段(first
和 last
)的嵌入文档。要将 $nin
比较运算符与 name
字段一起使用,我们使用点表示法 name.first
。
对于这个代码片段,我们试图检索那些 name.last
的值不是 $nin
的指定数组成员的文档的 name
、age
和 gender
运算符。
我们从那些 name.last
既不是 Raza
也不是 Ali
的文档中获取指定字段。我们还可以将 AND
条件与 $nin
运算符一起使用。
示例代码:
db.students.find(
{ "name.last": { $nin: ["Raza", "Ali"]}, "name.first": {$nin: ["Mehvish"]}},
{ "name": 1, "gender": 1, "age": 1, "_id":0}
).pretty();
这一次,我们不会得到任何输出,因为我们有两个文档,其中第一个文档的 Mehvish
作为 name.first
的值,而第二个文档包含 Raza
作为 name.last
字段的值.因此,这两个文档都被排除在结果集中,我们什么也没得到。
在 MongoDB 中使用 $nin
运算符和 find()
方法中查询数组
示例代码:
db.students.find(
{ "courses": { $nin: ["JavaScript", "Networking", "Psychology"] }},
{ "courses": 1, "department": 1, "_id":0}
).pretty();
输出:
{
"department" : "Computer Science",
"courses" : [
"Python",
"Java",
"Machine Learning",
"Data Science"
]
}
仔细理解这个输出。在此输出中,course
字段包含一个数组,其中没有元素等于 $nin
运算符的给定数组中的值。
整个文档,其中包含元素等于 JavaScript
、Networking
或 Psychology
的数组的任何字段都将从结果集中排除。
在 MongoDB 中使用 $nin
运算符和 find()
方法查询文档数组
仔细观察我们在本教程开始时填充 students
集合时使用的 contact
字段。它包含一个文档数组,其中每个文档都有一个嵌入(嵌套)文档。
如何使用 $nin
运算符进行查询?请参见下面给出的示例。
db.students.find(
{ "contact.phone.type": { $nin: ["cell"] }},
{ "contact": 1, "department": 1, "_id":0}
).pretty();
输出:
{
"department" : "Information Technology",
"contact" : [
{
"phone" : {
"type" : "landline",
"number" : "111-444-5555"
}
},
{
"mail" : {
"type" : "personal",
"email" : "aftab@hotmail.com"
}
}
]
}
使用 $nin
比较运算符和 update()
方法来更新 MongoDB 中的字段值
示例代码:
db.students.update(
{ "joining_year": {$nin: [2011,2014]}},
{ $set: {"joining_year": 2000}}
);
在这个代码片段中,我们检索了 joining_year
既不是 2014
也不是 2011
的文档,然后将 joining_year
的值设置为 2000
。接下来,使用以下命令查看更新后的文档。
db.students.find().pretty()
在 MongoDB 中使用带有正则表达式的 $nin
运算符
示例代码:
var array_of_regex = [/Data+/];
db.students.find(
{ "courses": {$nin: array_of_regex}},
{"name":1, "courses":1, "department":1, "_id":0}
).pretty();
输出:
{
"name" : {
"first" : "Aftab",
"last" : "Raza"
},
"department" : "Information Technology",
"courses" : [
"Python",
"JavaScript",
"Information Security"
]
}
对于这个例子,我们创建了一个可以包含不同正则表达式的数组。目前,我们只有一个正则表达式。
为什么我们必须制作一组正则表达式?这是因为 $nin
需要一个数组来比较。
相关文章
比较 MongoDB 中的字段
发布时间:2023/04/21 浏览次数:51 分类:MongoDB
-
在本文中,我们将了解如何比较 MongoDB 中的两个字段。 此外,我们将看到一个相关的示例和解释,以使主题更容易理解。
清除或删除 MongoDB 中的集合
发布时间:2023/04/21 浏览次数:147 分类:MongoDB
-
本篇文章将告诉大家如何删除 MongoDB 数据库中的集合以及删除 MongoDB 中的集合的不同方法。
向 MongoDB 集合中的每个文档添加新字段
发布时间:2023/04/21 浏览次数:107 分类:MongoDB
-
您将在这篇文章中了解 $set 和 $setOnInsert 操作。 此外,利用这两个运算符,快速描述了向 MongoDB 中的集合添加字段的挑战。
MongoDB 截断集合
发布时间:2023/04/21 浏览次数:178 分类:MongoDB
-
可以根据需要选择两个选项之一来截断下面的集合。 在今天的文章中,我们将学习如何在 MongoDB 中截断集合。
删除 MongoDB 中的重复项
发布时间:2023/04/21 浏览次数:151 分类:MongoDB
-
在本文中,我们将了解如何删除 MongoDB 中的重复条目,并且我们还将看到一个带有适当解释的示例,以使主题更容易理解。
使用 NodeJS 检查 MongoDB 中是否存在集合
发布时间:2023/04/21 浏览次数:194 分类:MongoDB
-
在本文中,我们将检查 MongoDB 数据库中是否存在一个集合,并且我们还将查看与主题相关的示例,以使主题更容易理解。 为此,我们将使用 Node.js。
MongoDB 中的唯一索引
发布时间:2023/04/21 浏览次数:144 分类:MongoDB
-
在这篇教学文章中,您将了解唯一索引、它们是什么以及如何在 MongoDB 中使索引唯一。 此外,还简要详细地解释了使用户的电子邮件在 MongoDB 中唯一。
在 MongoDB 中创建索引
发布时间:2023/04/21 浏览次数:104 分类:MongoDB
-
索引有助于有效解决查询。 如果没有索引,MongoDB 必须遍历集合中的每个文档才能找到与查询匹配的文档。因此,在今天的文章中,我们将学习如何在 MongoDB 中创建索引。
MongoDB 中的稀疏索引
发布时间:2023/04/21 浏览次数:142 分类:MongoDB
-
在本文中,我们将讨论 MongoDB 中的稀疏索引。 此外,我们将提供一个相关示例并进行解释,以使该主题更容易理解。