迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 数据库 > MongoDB >

MongoDB 数组聚合匹配

作者:迹忆客 最近更新:2023/03/17 浏览次数:

本文通过代码示例介绍了如何在数组中使用 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 数组包含 JavaPython (或两者兼有) 的文档。同样,我们可以使用数值数组。

示例代码:

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 数组包含 36(或两者)的文档。

示例代码:

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 运算符的所有指定元素的文档。

生成的文档必须包含 JavaPython 元素。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 MongoDB Shell 中列出所有数据库

发布时间:2023/05/11 浏览次数:180 分类:MongoDB

交互式 Mongo Shell 提供了多个用于获取数据的选项。 本文介绍了在 Mongo Shell 中列出数据库的几种不同方法。

MongoDB 中检查字段包含的字符串

发布时间:2023/05/11 浏览次数:1024 分类:MongoDB

这篇文章解决了如何在 MongoDB 中使用正则表达式来确定字段是否包含字符串。在 MongoDB 中使用正则表达式 正则表达式 (regex) 是定义搜索模式的文本字符串。

在 MongoDB 中 upsert 更新插入

发布时间:2023/05/11 浏览次数:214 分类:MongoDB

在 MongoDB 中,upsert 结合了更新和插入命令。 它可以在 update() 和 findAndModify() 操作中使用。MongoDB 中的 upsert 查询 upsert 采用单个布尔参数。

如何卸载 MongoDB

发布时间:2023/05/11 浏览次数:745 分类:MongoDB

要从您的计算机中卸载 MongoDB,您必须先删除 MongoDB 服务、数据库和日志文件。使用这篇 MongoDB 文章,您将能够从 Ubuntu Linux、Mac 和 Windows 卸载 MongoDB。 请务必保留数据备份,因为一旦卸载,便

在 MongoDB 中存储日期和时间

发布时间:2023/05/11 浏览次数:762 分类:MongoDB

本 MongoDB 教程解释了 Date() 对象是什么以及如何使用 Date() 方法对集合进行排序。 这也将帮助您找到在 MongoDB 中显示和存储日期/时间的最佳方法。

MongoDB 按 ID 查找

发布时间:2023/05/11 浏览次数:1856 分类:MongoDB

MongoDB 中的 find by Id() 函数用于获取与用户提供的 id 相匹配的文档。 如果找不到与指定 ID 匹配的文档,则返回空值。

检查 MongoDB 服务器是否正在运行

发布时间:2023/05/11 浏览次数:247 分类:MongoDB

这篇 MongoDB 教程将告诉您如何检查是否安装了 MongoDB 以及安装的 MongoDB 服务器的版本。 它在 Windows、UBUNTU 和 MAC 等不同的操作系统中实现。

MongoDB 中的分页

发布时间:2023/05/11 浏览次数:174 分类:MongoDB

这篇文章将介绍什么是 MongoDB 中的分页。 为什么在 MongoDB 中需要分页以及在 MongoDB 中完成分页的不同方法或方式是什么。

MongoDB 从查询开始

发布时间:2023/05/11 浏览次数:186 分类:MongoDB

在这篇 MongoDB 文章中,用户将学习如何使用 $regex 进行开始查询。 它为查询中的模式匹配字符串提供正则表达式功能。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便