如何使用 MongoDB 聚合进行通用集合操作(​​并集、交集、差集)

2023-11-26

我遇到过一些特殊目的的集合运算实现,但没有遇到过一般情况。执行集合运算(特别是交集、并集、对称差)的一般情况是什么?在 $where 或 map reduce 中使用 javascript 更容易弄清楚这一点,但我想知道如何在聚合中执行此操作以获得本机性能。

说明这个问题的更好方法是用一个例子。假设我有一条包含 2 个数组/集的记录:

db.colors.insert({
    _id: 1,
    left : ['red', 'green'],
    right : ['green', 'blue']
});

我想找到“左”和“右”数组的并集、交集和差值。更好的是,通过图示我想找到:

Union--> ['红色', '绿色', '蓝色']

union

路口--> ['绿色']

enter image description here

对称差--> ['红色', '蓝色']

enter image description here


仅限 2.6+ 版本:

从 MongoDB 2.6 版本开始,这变得更加容易。您现在可以执行以下操作来解决此问题:

Union

db.colors.aggregate([
    {'$project': {  
                    union:{$setUnion:["$left","$right"]}
                 }
    }
]);

路口

db.colors.aggregate([
    {'$project': {  
                  int:{$setIntersection:["$left","$right"]}
                 }
    }
]);

相对补语

db.colors.aggregate([
    {'$project': {  
                    diff:{$setDifference:["$left","$right"]}
                 }
    }
]);

对称差

db.colors.aggregate([
    {'$project': {  
                    diff:{$setUnion:[{$setDifference:["$left","$right"]}, {$setDifference:["$right","$left"]}]}
                 }
    }
]);

注意:有一个ticket请求将对称差异添加为核心特征,而不是必须对两个集合差异进行并集。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 MongoDB 聚合进行通用集合操作(​​并集、交集、差集) 的相关文章

  • 我可以将 MongoDB 与实体框架一起使用吗?

    实体框架有可能支持MongoDB数据库吗 有人写过实体框架MongoDB Provider吗 简短的回答 不 这肯定是可能的 但不合理 MongoDB 是文档数据库 不支持集合之间的任何物理关系 EF 非常适合 SQL MySQL 等关系数
  • 了解新的 mongo id 并将其与 Iron-router 一起使用

    我有一个简单的帖子路线来寻找帖子 id 问题是pathFor助手创建这样的路径 ObjectID 52e16453431fc2fba4b6d6a8 我猜 mongoDB 插入已更改 现在 id对象在其内部包含另一个对象 称为 str 这是我
  • Spring Data MongoDB:聚合框架 - 使用嵌套属性进行排序会抛出无效引用

    I found Spring论坛上的这篇文章 http forum spring io forum spring projects data nosql 130522 spring data mongodb aggregation fram
  • 在 MongoDB 上,当我的回调位于“find”内部时,如何限制查询?

    我在 MongoDB 中有这个查询 db privateMessages find or fromId userId toId socket userId fromId socket userId toId userId function
  • mongodb 获取最后插入的文档

    此 Meteor 代码尝试查找集合中的最后一个文档 find userId this userId sort createdAt 1 limit 1 但由于所有文档都是按时间顺序排列的 我想删除createdAt字段 所以一旦被 删除 是否
  • AngularJS - 设置下拉列表的选定值不起作用

    我在这里复制了我的问题 http jsfiddle net U3pVM 2840 http jsfiddle net U3pVM 2840 正如标题所示 我无法设置使用 ng options 填充的选择的选定值 我已经搜索并尝试了我找到的所
  • MongoDB 日志文件和 oplog 有什么不同?

    我最近开始使用 Mongodb 并尝试探索副本集和崩溃恢复 我读过它就像日志文件写入头重做日志文件一样 oplog 文件是每个写入活动都将被写入的文件 这两个有什么区别 我们在主站和从站上都有操作日志吗 请发布任何可以阐明该领域的网络链接
  • MongoClient:尝试使用 Mongoose 时未连接错误

    作为课程的一部分 我正在学习 MongoDB 现在正在学习 Mongoose 我已经完全按照课程中的方式编写了代码 但是当尝试使用node app js 我收到以下错误 node app js Output node 25772 Unhan
  • MongoDB 支持浮点类型吗?

    我正在将 mysql 数据库迁移到 mongodb 但我读过 MongoDb 数据类型 然后没有引用浮点类型 如 float double decimal 我如何在 mysql 模式中拥有一些带有十进制类型的字段 我该怎么做或我能做什么 M
  • 如何在 Nodejs - mongodb 搜索中对结果进行排序,但是,通过调用动态方法

    我正在 Nodejs 中开发一个 Web 应用程序 通过 mongo 本机连接器连接到 mongodb 在我的一个 js 文件中 我有一个通用方法来调用 find 或 findOne 操作以从 mongodb 集合中检索我需要的任何内容 如
  • 用于全文搜索和 2 亿多条记录的数据库

    我即将创建一个包含至少 2 亿个条目的庞大数据库 数据库需要可使用全文进行搜索 并且速度应该很快 我的数据库从许多不同的数据源获取数据 我需要定期导入新的或更新的数据 将我的所有数据存储在像 mysql 这样的关系数据库中 然后创建一个 n
  • Mongodb 以不区分大小写的方式排序

    我在 Nodejs express 中以 mongodb 作为数据库的一个项目中非常努力地构建 当我使用 sort 获取所有数据时 它以错误的方式返回数据 那么有没有办法按照我的预期得到正确的格式 如下所示 如果我们在数据库中有三个记录 i
  • Swift 结构类型集

    说我有一个struct 可以是任何东西 struct Cube var x Int var y Int var z Int var width Int 然后我该如何创建一个Set这些点中 是否存在两个具有相同属性的对象 let points
  • 在 MongoDB 和 Apache Solr 之间同步数据的简单方法

    我最近开始使用 MongoDB 和 Apache Solr 我使用 MongoDB 作为数据存储 并且希望 Apache Solr 为我的数据创建索引 以实现应用程序中的搜索功能 经过一些研究 我发现 基本上有两种方法可以在 MongoDB
  • Express MongoDB find() 基于 _id 字段

    因此 在我的 Express 应用程序中 我尝试根据我的 id 字段查找 请参阅下面我的 MongoDB 记录 id oid 58c2a5bdf36d281631b3714a title EntertheBadJah subTitle Lo
  • 由于WiredTiger.turtle权限,Mongodb无法启动

    我试图在 ubuntu 16 04 上启动 mongodb 4 0 4 但数据库拒绝了我的所有尝试 我检查了 mongodb 日志文件 发现名为 WiredTiger turtle 的文件没有所需的权限 这里记录错误 2018 11 26T
  • 如何从集合中检索元素而不删除它?

    假设如下 gt gt gt s set 1 2 3 我如何获得一个值 任何值 s不做s pop 我想将该项目保留在集合中 直到我确定可以删除它 这只有在异步调用另一个主机之后才能确定 又快又脏 gt gt gt elem s pop gt
  • 如何在 MongoDB 中获取连接的客户端

    我正在编写一个使用 mongo 作为数据库的应用程序 我想打印连接到数据库的客户端 例如打印他们的ip 我怎样才能得到这些信息 我尝试使用 db serverStatus connections 但它给了我可以访问我的数据库的计算机数量 您
  • 如何在 Mongoose 中定义排序函数

    我正在开发一个小型 NodeJS Web 应用程序 使用 Mongoose 访问我的 MongoDB 数据库 我的收藏的简化架构如下 var MySchema mongoose Schema content type String loca
  • 如何将excel文件(XLSX)导入mongoDB [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有一组数据作为输入以 XLSX 格式提供给 MongoDB 我该如何将 Excel 文件作为输入导入

随机推荐