MongoDB 数组聚合匹配
本文通过代码示例介绍了如何在数组中使用 MongoDB 聚合匹配。我们将探索使用字符串类型数组和数值类型数组的不同示例。
MongoDB 数组中的聚合匹配
我们已经学会了将匹配聚合阶段与比较运算符、$and
/$or
运算符和 $group
/$project
阶段一起使用。你可以在这里找到那篇文章。
在这里,我们专注于学习数组中的 MongoDB 聚合匹配以找到匹配的文档。创建一个集合,其中至少一个字段包含一个数组。
你可以利用以下命令跟随我们。
示例代码:
db.createCollection('student_courses');
db.student_courses.insertMany([
{"_id": "ma01", courses: ['Java', 'Python', 'Databases'], results: [3,5]},
{"_id": "sd02", courses: ['Java', 'Python'], results: [6,3]},
{"_id": "gh03", courses: ['JavaScript', 'Angular'], results: [8,9]},
{"_id": "rt04", courses: ['Data Science', 'Python'], results: [2,5]}
]);
db.student_courses.find();
输出:
{ "_id" : "ma01", "courses" : [ "Java", "Python", "Databases" ], "results" : [ 3, 5 ] }
{ "_id" : "sd02", "courses" : [ "Java", "Python" ], "results" : [ 6, 3 ] }
{ "_id" : "gh03", "courses" : [ "JavaScript", "Angular" ], "results" : [ 8, 9 ] }
{ "_id" : "rt04", "courses" : [ "Data Science", "Python" ], "results" : [ 2, 5 ] }
使用 $match
和 $in
在 MongoDB 的数组中查找匹配的文档
示例代码:
db.student_courses.aggregate({
$match:{
$expr:{ $in: ['Java', "$courses"]}
}
});
输出:
{ "_id" : "ma01", "courses" : [ "Java", "Python", "Databases" ], "results" : [ 3, 5 ] }
{ "_id" : "sd02", "courses" : [ "Java", "Python" ], "results" : [ 6, 3 ] }
此代码片段使用 $match
和 $expr
让我们在查询语言中使用聚合表达式。在这里,$expr
构建了查询表达式,用于比较 $match
阶段中确切文档的字段。
此外,$in
运算符选择 courses
数组包含 Java
作为数组元素的那些文档。要检查指定数组中的多个值,请按以下方式使用查询。
示例代码:
db.student_courses.aggregate({
$match:{
courses:{ $in: ['Java', 'Python']}
}
});
输出:
{ "_id" : "ma01", "courses" : [ "Java", "Python", "Databases" ], "results" : [ 3, 5 ] }
{ "_id" : "sd02", "courses" : [ "Java", "Python" ], "results" : [ 6, 3 ] }
{ "_id" : "rt04", "courses" : [ "Data Science", "Python" ], "results" : [ 2, 5 ] }
这个例子只选择那些 courses
数组包含 Java
或 Python
(或两者兼有) 的文档。同样,我们可以使用数值数组。
示例代码:
db.student_courses.aggregate({
$match:{
results:{ $in: [3,6]}
}
});
输出:
{ "_id" : "ma01", "courses" : [ "Java", "Python", "Databases" ], "results" : [ 3, 5 ] }
{ "_id" : "sd02", "courses" : [ "Java", "Python" ], "results" : [ 6, 3 ] }
这个查询只检索那些 results
数组包含 3
或 6
(或两者)的文档。
示例代码:
db.student_courses.aggregate({
$match:{
$expr:{ $gt: [{$sum: "$results"}, 10]}
}
});
输出:
{ "_id" : "gh03", "courses" : [ "JavaScript", "Angular" ], "results" : [ 8, 9 ] }
在这里,我们只选择那些 results
数组的所有元素之和大于 10
的文档。
在 MongoDB 中使用 $match
和 $eq
来寻找数组中的匹配文档
示例代码:
db.student_courses.aggregate({
$match:{
courses:{ $eq: ['Java', 'Python']}
}
});
输出:
{ "_id" : "sd02", "courses" : [ "Java", "Python" ], "results" : [ 6, 3 ] }
在这里,我们使用 $eq
运算符仅获取那些 courses
数组包含我们使用 $eq
运算符指定的确切数组的元素。
在 MongoDB 中使用 $match
和 $all
来查找数组中的匹配文件
示例代码:
db.student_courses.aggregate({
$match:{
courses:{ $all: ['Java', 'Python']}
}
});
输出:
{ "_id" : "ma01", "courses" : [ "Java", "Python", "Databases" ], "results" : [ 3, 5 ] }
{ "_id" : "sd02", "courses" : [ "Java", "Python" ], "results" : [ 6, 3 ] }
$all
等价于 $and
运算符。此代码检索所有那些 courses
数组包含 $all
运算符的所有指定元素的文档。
生成的文档必须包含 Java
和 Python
元素。
相关文章
比较 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 中的稀疏索引。 此外,我们将提供一个相关示例并进行解释,以使该主题更容易理解。