在 MongoDB 上执行聚合/集合交集

2024-03-01

我有一个查询,在对示例数据集执行一些聚合后,将以下示例视为中间数据;

fileid 字段包含文件的 id,以及包含对相应文件进行了一些更改的用户数组的用户数组

{
   “_id” : {  “fileid” : 12  },
   “_user” : [ “a”,”b”,”c”,”d” ]
}
{
   “_id” : {  “fileid” : 13  },
   “_user” : [ “f”,”e”,”a”,”b” ]
}
{
   “_id” : {  “fileid” : 14  },
   “_user” : [ “g”,”h”,”m”,”n” ]
}
{
   “_id” : {  “fileid” : 15  },
   “_user” : [ “o”,”r”,”s”,”v” ]
}
{
   “_id” : {  “fileid” : 16  },
   “_user” : [ “x”,”y”,”z”,”a” ]
}
{
   “_id” : {  “fileid” : 17  },
   “_user” : [ “g”,”r”,”s”,”n” ]
}

我需要找到解决方案 - >任何两个用户对至少两个同一文件进行了一些更改。所以输出结果应该是

{
   “_id” : {  “fileid” : [12,13]  },
   “_user” : [ “a”,”b”]
}
{
   “_id” : {  "fileid” : [14,17]  },
   “_user” : [ “g”,”n” ]
}
{
   “_id” : {  "fileid” : [15,17]  },
   “_user” : [ “r”,”s” ]
}

非常感谢您的投入。


这是一个有点复杂的解决方案。这个想法是首先使用数据库获取可能对的总体,然后反过来要求数据库在_user场地。请注意,数千名用户将创建一个相当大的配对列表。我们用$addFields以防万一输入记录比我们在示例中看到的更多,但如果没有,为了提高效率,请替换为$project以减少流经管道的物料量。

//
// Stage 1:  Get unique set of username pairs.
//
c=db.foo.aggregate([
{$unwind: "$_user"}

// Create single deduped list of users:
,{$group: {_id:null, u: {$addToSet: "$_user"} }}

// Nice little double map here creates the pairs, effectively doing this:
//    for index in range(0, len(list)):
//      first = list[index]
//      for p2 in range(index+1, len(list)):
//        pairs.append([first,list[p2]])
// 
,{$addFields: {u: 
  {$map: {
    input: {$range:[0,{$size:"$u"}]},
    as: "z",
    in: {
        $map: {
            input: {$range:[{$add:[1,"$$z"]},{$size:"$u"}]},
            as: "z2",
            in: [
            {$arrayElemAt:["$u","$$z"]},
            {$arrayElemAt:["$u","$$z2"]}
            ]
        }
    }
    }}
}}

// Turn the array of array of pairs in to a nice single array of pairs:
,{$addFields: {u: {$reduce:{
        input: "$u",
        initialValue:[],
        in:{$concatArrays: [ "$$value", "$$this"]}
        }}
    }}
          ]);


// Stage 2:  Find pairs and tally up the fileids

doc = c.next(); // Get single output from Stage 1 above.                       

u = doc['u'];

c2=db.foo.aggregate([
{$addFields: {_x: {$map: {
                input: u,
                as: "z",
                in: {
                    n: "$$z",
                    q: {$setIsSubset: [ "$$z", "$_user" ]}
                }
            }
        }
    }}
,{$unwind: "$_x"}
,{$match: {"_x.q": true}}
//  Nice use of grouping by an ARRAY here:
,{$group: {_id: "$_x.n", v: {$push: "$_id.fileid"}, n: {$sum:1} }}
,{$match: {"n": {"$gt":1}}}
                     ]);

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

在 MongoDB 上执行聚合/集合交集 的相关文章

  • 用于检查 Apache Camel XML 中字符串的 JSONPath 表达式

    假设我有一个简单的 json 文件 如下所示 log host blah severity INFO system 1 我正在使用 Apache Camel 它是 Spring XML 来处理和路由 json 文件 我的路由代码看起来像这样
  • Postgres JSON 数据类型 Rails 查询

    我正在使用 Postgres 的 json 数据类型 但想要使用嵌套在 json 中的数据进行查询 排序 我想在 json 数据类型上使用 where 进行订购或查询 例如 我想查询关注者数量 gt 500 的用户 或者我想按关注者或关注数
  • Azure 应用服务在配置中添加字符串数组

    Net core 应用程序并在 Azure 应用服务中部署该应用程序 在我的应用程序中 我有一个包含以下内容的应用程序 settings json 文件 Roles Roles Admins Users 我的 ARM 模板中有以下配置 参数
  • 如何从 JSON 响应重定向?

    所以我尝试使用 Flask 和 Javascript 上传器 Dropzone 上传文件并在上传完成后重定向 文件上传正常 但在烧瓶中使用传统的重定向 return redirect http somesite com 不执行任何操作 页面
  • 如何避免 ArrayIndexOutOfBoundsException 或 IndexOutOfBoundsException? [复制]

    这个问题在这里已经有答案了 如果你的问题是我得到了java lang ArrayIndexOutOfBoundsException在我的代码中 我不明白为什么会发生这种情况 这意味着什么以及如何避免它 这应该是最全面的典范 https me
  • 将数组拆分为特定数量的块

    我知道array chunk 允许将数组拆分为多个块 但块的数量根据元素的数量而变化 我需要的是始终将数组拆分为特定数量的数组 例如 4 个数组 以下代码将数组分为 3 个块 两个块各有 2 个元素 1 个块有 1 个元素 我想要的是将数组
  • C# Newtonsoft 反序列化 JSON 数组

    我正在尝试使用 Newtonsoft 反序列化数组 以便我可以在列表框中显示来自基于云的服务器的文件 但无论我尝试什么 我总是会收到此错误 Newtonsoft Json JsonReaderException 解析值时遇到意外字符 路径
  • const 和 constexpr 数组之间的区别

    为什么有区别const and constexpr当与数组一起使用时 int const xs 1 2 3 constexpr int ys 1 2 3 int as xs 0 error int bs ys 0 fine 我希望两者都能x
  • Angular JS 中的数组

    我是 Angular JS 新手 我正在将元素推送到数组中 然后想使用 ng repeat 在 html 中显示 scope groupedMedia Adding elements through a for loop scope gro
  • Express中间件修改请求

    我目前有一个正在运行的服务器 前端使用nodejs mongo express 和 W2UI W2ui 请求来自包含所有参数的记录数组 记录 名称 foo 我想编写一个中间件 在请求到达路由之前对其进行编辑和更改 您可以创建自己的中间件来处
  • Postgres JSONB:数组数组的 where 子句

    postgres 中有 v 9 5 如果有的话 create table json test id varchar NOT NULL data jsonb NOT NULL PRIMARY KEY id 其中 data 是 json 并且包
  • 如何在golang中解析JSON而不需要解组两次

    我有一个 Web 套接字连接 它在 JSON 对象中发送不同类型的消息 并且我想将内容解组到一些已知的结构中 为此 我认为我应该执行以下操作 步骤 1 将 JSON 解组为通用映射 字符串 接口 步骤 2 找到我要找的钥匙 步骤 3 尝试将
  • VBA中的字符串是可以迭代的数组吗?

    VBA中字符串是数组吗 例如 我可以像在 C C 中那样迭代它吗 做这样的事情 char myArray 10 for int i 0 i lt length i cout lt lt myArray i VBA 中的等价物是什么 它的行为
  • Ruby on Rails 服务器在 HTTPS POST 请求期间崩溃

    我正在尝试与你沟通城市飞艇API http urbanairship com docs push html broadcast使用 ROR Web 应用程序 在我的控制器中 我有以下代码 require net http require n
  • 使用 NewtonSoft 在一行中生成 JSON 对象

    我正在使用 JSON 库牛顿软件 http nuget org packages newtonsoft json生成 JSON 字符串 JObject out JObject FromObject new typ photos return
  • Numpy - 根据表示一维的坐标向量的条件替换数组中的值

    我有一个data多维数组 最后一个是距离 另一方面 我有距离向量r 例如 Data np ones 20 30 100 r np linspace 10 50 100 最后 我还有一个临界距离值列表 称为r0 使得 r0 shape Dat
  • 包含 contains 的 json 格式查询

    我在 ansible 中有以下 json 输出 active transaction null cores 4 hostname alpha auth wb01 active transaction null cores 4 hostnam
  • 如何返回 json 结果并将 unicode 字符转义为 \u1234

    我正在实现一个返回 json 结果的方法 例如 public JsonResult MethodName Guid key var result ApiHelper GetData key Data is stored in db as v
  • Elasticsearch:预期的字段名称,但得到了 START_OBJECT

    我一直在尝试运行以下查询 但每次运行时都会收到以下错误 nested ElasticsearchParseException Expected field name but got START OBJECT field value fact
  • jolt变换后json对象的排序

    Input The input json object 所需输出 Event1 Value1 Event2 collection of json objects Event3 The input json object 所以基本上输入 js

随机推荐

  • GraphViz - 子图的对齐

    I d like to draw a diagram like this But the only diagram I can draw is 我使用的代码 graph rankdir LR node shape box x1 x2 x3
  • 生产证书不适用于 APNS,但适用于 AWS SNS 中的 APNS_SANDBOX

    我们在应用程序商店中有一个实时 iOS 应用程序 我们在集成 SNS 时面临以下问题 在 SNS 控制台上创建新的平台应用程序时 APNS 不接受生产证书 但 APNS SANDBOX 接受生产证书和开发证书 闪烁的错误是 无效参数 属性原
  • Google Map API 可查找我所在位置附近的餐厅

    我正在开发 Google 地图 api 这是我查找附近餐厅的方法 当我运行这个时 我只得到当前位置 我没有收到任何与餐厅数据相关的信息
  • CSS“font-size:medium”是否将字体设置为.Body字体大小或*浏览器*的基本字体大小?

    在 CSS 缺失的手册 中 作者说 font size medium 或其他尺寸关键字 设置相对于浏览器的基本字体大小 但我在 FF2 和 IE6 中看到的是 它将字体大小设置为我在 CSS HTML 或 BODY 样式 这是更优选的 中指
  • 我对 for 循环中的 javascript let 和 var 感到困惑? [复制]

    这个问题在这里已经有答案了 这是我的循环代码 var username Sam Adarsh Rohit Rajat for var i in username console log username i 它的输出与需要的相同 但我不确定
  • 在Python中将整数转换为字符串

    如何将整数转换为字符串 42 42 For the reverse see How do I parse a string to a float or int https stackoverflow com questions 379906
  • 无法让 Ninject.Extensions.Interception 工作

    多年来我一直在努力弄清楚这是我们的 当我尝试将我的类与拦截器绑定时 我收到以下异常 Kernel Bind
  • 多参数类型同义词实例

    我试图弄清楚是否可以 以及如何 为多参数类型同义词定义类实例 例如 LANGUAGE MultiParamTypeClasses FlexibleInstances type F a b a gt b data DF a b DF a gt
  • OpenCl 代码可以在一台机器上运行,但我在另一台机器上收到 CL_INVALID_KERNEL_ARGS

    我有以下代码 它在一台机器上运行良好 但是当我尝试在另一台具有更好显卡的机器上运行它时 我收到错误 global 0 512 global 1 512 local 0 16 local 1 16 ciErrNum clEnqueueNDRa
  • SQL查询从多个表返回数据

    我想了解以下信息 如何从数据库中的多个表中获取数据 有哪些类型的方法可以做到这一点 什么是联接和并集 它们之间有何不同 与其他方法相比 我应该什么时候使用每一种方法 我计划在我的 例如 PHP 应用程序中使用它 但不想对数据库运行多个查询
  • 删除表中的最后一行

    我有一个简单的问题 我想删除表中的最后一行 我复制了一个删除选中行的函数 function deleterow tableID try var table document getElementById tableID var rowCou
  • 删除 Ruby 中字符串中的空白换行符

    我有一串由四个空白行组成的字符串 总共八行如下 str aaa n n nbbb n nccc ddd n 我想在一行中返回这一切 单行输出应如下所示 aaabbbcccddd 我使用了各种修剪功能来获取输出 但仍然失败 我在这里必须使用什
  • 如何使用 Axios 发布到 Django?

    我正在从 Jquery AJAX 迁移到 Axios 因为我使用的是 ReactJS 所以我认为它更干净 我在向服务器发布一个简单的请求时遇到了一些麻烦 post 方法会通过我的视图 但每当我print request POST 我有一个空
  • 无法在当前状态下启动设备:已启动

    在模拟器中运行 构建 运行 项目时 对 Xcode6 beta 中的 无法在当前状态下启动设备 已启动 错误的任何猜测 我刚刚在 Xcode 6 中运行我现有的项目 我发现了上面的消息 我尝试清理 删除派生数据 甚至重新启动模拟器也不起作用
  • 如何在 python concurrent.futures 中中断 time.sleep()

    我正在玩并发期货 https docs python org 3 library concurrent futures html 目前我未来的电话time sleep secs 看起来Future cancel https docs pyt
  • 如何从外部属性文件访问 pom.xml 中的变量?

    我需要通过一个键来获取值pom xml来自外部属性文件 属性文件的位置位于src main resources dev properties 我尝试通过使用 Maven 中的属性来解决这个问题 请帮我 pom xml
  • 多次使用 std::async 来执行小任务性能友好吗?

    为了提供一些背景信息 我正在处理一个保存的文件 在使用正则表达式将文件拆分为其组件对象后 我需要根据对象的类型来处理对象的数据 我目前的想法是使用并行性来获得一点性能增益 因为加载每个对象是彼此独立的 所以我要定义一个LoadObject函
  • android,如何在sqlitedatabase中执行sql文件

    我有 food db sql 文件存储在 res raw 文件夹中 它里面有大量的 插入 我的问题是如何执行文件并将数据放入我的 Android 应用程序中的 sqlite 数据库中 这是我的数据库代码 有什么建议么 private sta
  • 读取文本文件块

    我有一个文本文件 其中每隔几行后就会在行开头重复一个特定字符 没有 之间的线数不固定 我能够找出发生这种情况的那些行 我想读一下中间的那些行 using StreamReader sr new StreamReader text file
  • 在 MongoDB 上执行聚合/集合交集

    我有一个查询 在对示例数据集执行一些聚合后 将以下示例视为中间数据 fileid 字段包含文件的 id 以及包含对相应文件进行了一些更改的用户数组的用户数组 id fileid 12 user a b c d id fileid 13 us