如何使用 lambda 函数在 mongodb 中的两个集合之间进行多重连接?

2024-04-20

我有两个集合 1) user_posts 2)user_profile。找到以下采集数据供您参考。

1)user_posts集合

_id :ObjectId("5d519f861c9d4400005ebd1b")
userid : ObjectId("5d518caed55bc00001d235c1")
media : "hello.jpg"
type : "jpg"
created : " "
modified : " "
like : Array
       0 : Object
           userid : ObjectId("5d518caed55bc00001d235c1")
           status : "like"
       1 : Object
           userid : ObjectId("5d518da6d55bc00001d235c2")
           status : "happy"
comment : Array
       0 : Object
           userid : ObjectId("5d518caed55bc00001d235c1")
           comment : "hello"
       1 : Object
           userid : ObjectId("5d518da6d55bc00001d235c2")
           comment : "welcome"
share : Array
       0 : Object
           userid : ObjectId("5d518caed55bc00001d235c1")
           status : "shared"
       1 : Object
           userid : ObjectId("5d518da6d55bc00001d235c2")
           status : "shared"

2)user_profile集合

 _id : ObjectId("5d518caed55bc00001d235c1")
 username : "ramesh",
 photo :  " ",
 created : " ",
 modified : " "

 _id : ObjectId("5d518da6d55bc00001d235c2")
 username : "shekar",
 photo :  " ",
 created : " ",
 modified : " "

现在我尝试从 lambda 函数中的 user_profile 获取个人资料详细信息。但我没有得到详细信息。找到下面的 lambda 函数代码。

def lambda_handler(event, context):

print("Received event: " + json.dumps(event, indent=1))

user_posts = db.user_posts

Userid = event['userid']
uid = ObjectId(Userid)

dispost = list(user_posts.aggregate([{
"$match" : { "userid" : uid }
},
{ "$graphLookup" : 
     {
       "from" : "user_profile",
       "startWith" : "$like.userid",
       "connectFromField" : "like.userid",
       "connectToField" : "_id",
       "as" : "userdetails"
     }
},
{ "$graphLookup" : 
     {
       "from" : "user_profile",
       "startWith" : "$comment.userid",
       "connectFromField" : "comment.userid",
       "connectToField" : "_id",
       "as" : "userdetails1"
     }
}
{ "$graphLookup" : 
     {
       "from" : "user_profile",
       "startWith" : "$share.userid",
       "connectFromField" : "share.userid",
       "connectToField" : "_id",
       "as" : "userdetails2"
     }
}
]))     
disair = json.dumps(dispost, default=json_util.default)
return json.loads(disair)

但我没有得到输出。我需要像下面这样的输出。

_id :ObjectId("5d519f861c9d4400005ebd1b")
userid : ObjectId("5d518caed55bc00001d235c1")
username : "ramesh"
photo : " ",
media : "hello.jpg"
type : "jpg"
created : " "
modified : " "
like : Array
       0 : Object
           userid : ObjectId("5d518caed55bc00001d235c1")
           status : "like"
           username : "ramesh"
           photo : " "
       1 : Object
           username : "shekar"
           photo : " "
           userid : ObjectId("5d518da6d55bc00001d235c2")
           status : "happy"
           username : "shekar"
           photo : " "
comment : Array
       0 : Object
           userid : ObjectId("5d518caed55bc00001d235c1")
           comment : "hello"
           username : "ramesh"
           photo : " "
       1 : Object
           userid : ObjectId("5d518da6d55bc00001d235c2")
           comment : "welocme"
           username : "shekar"
           photo : " "
share : Array
       0 : Object
           userid : ObjectId("5d518caed55bc00001d235c1")
           status : "shared"
           username : "ramesh"
           photo : " "
       1 : Object
           userid : ObjectId("5d518da6d55bc00001d235c2")
           status : "shared"
           username : "shekar"
           photo : " "

你能帮我解决方案吗?提前致谢。


请检查一下:

db.collection("user_posts").aggregate(
{ $match: {"userid" : uid}},
{ $unwind: '$like' },
{ $lookup: { from: "users", localField: "like.userid", foreignField: "_id", as: 
"users" }},
{ $group: {
    _id: "$_id",
    like: { $push: { $mergeObjects: ['$like', { $arrayElemAt: [ "$users", 0 ] } ]}},
    data: { $first: "$$ROOT" }
}},
{ $replaceRoot: { newRoot: { $mergeObjects: ['$data', { like: "$like"} ]} } },
{ $unwind: '$comment' },
{ $lookup: { from: "users", localField: "comment.userid", foreignField: "_id", as: 
 "users" }},
{ $group: {
    _id: "$_id",
        comment: { $push: { $mergeObjects: ['$comment', { $arrayElemAt: [ "$users", 0 
 ] } ]}},
        data: { $first: "$$ROOT" }
}},
{ $replaceRoot: { newRoot: { $mergeObjects: ['$data', { comment: "$comment"} ]} } },
{ $unwind: '$share' },
{ $lookup: { from: "users", localField: "share.userid", foreignField: "_id", as: 
"users" }},
{ $group: {
    _id: "$_id",
    share: { $push: { $mergeObjects: ['$share', { $arrayElemAt: [ "$users", 0 ] } 
]}},
    data: { $first: "$$ROOT" }
}},
{ $replaceRoot: { newRoot: { $mergeObjects: ['$data', { share: "$share"} ]} } },
{ $project: { users: 0 }}
)

您将获得输出,根据您的要求更改项目聚合中的添加/删除字段名称

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

如何使用 lambda 函数在 mongodb 中的两个集合之间进行多重连接? 的相关文章

  • 如何使用 nosql 构建成就和徽章

    我目前有一个使用 mongodb 作为数据库的社交游戏应用程序 我的问题是 如果我想创建一个积分和徽章系统 有哪些建议 成就 徽章的业务逻辑可能会变得非常复杂并且非常临时 因此实时授予徽章似乎效率不高 我想象将跟踪的操作添加到队列中的某处
  • MongoDB聚合查询性能提升

    我最近开始将数据从 Microsoft SQL Server 转移到 MongoDB 以获得可扩展性 就移民而言一切都很好 该文档有 2 个重要字段 customer timestamphash 年月日 我们在安装 MongoDB 的 Az
  • 如何提高 MongoDB 中 update() 和 save() 的性能?

    我正在寻找有关如何在以下情况下提高数据库性能的提示 作为示例应用程序 我今天编写了一个相当简单的应用程序 它使用 Twitter 流 API 来搜索某些关键字 然后将结果存储在 MongoDB 中 该应用程序是用 Node js 编写的 我
  • 从现有 MongoDB 创建可视化的工具[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我接手了一个现有 MongoDB 的项目 我想获得现有数据的视觉图像 图表等 显然 MongoDB 与
  • 嵌套过滤器:$filter 数组,然后是 $filter 子数组

    本质上 我试图过滤掉已被 废弃 的子文档和子子文档 这是我的架构的精简版本 permitSchema id name feeClassifications new Schema id trashed name fees new Schema
  • 如何在 Rails 3 中并行使用 Mongoid 和 ActiveRecord?

    我使用的是 Rails 3 并使用 ActiveRecord 开始我的应用程序 现在 我有很多模型 并且关系开始变得复杂 有些可以用面向文档的结构更简单地表达 所以我想尝试迁移到 MongoDB 并使用 Mongoid 我一直听说您不必使用
  • Azure DocumentDB 本地模拟器是否支持 mongodb 协议?

    Azure DocumentDB 本地模拟器是否支持类似于 Azure 托管 DocumentDB 中可用的 MongoDB 协议的 mongodb 协议 我没有看到启动本地模拟器时指定协议的方法 是的 Azure DocumentDB 模
  • 如何最高效地更新MongoDB中的大量文档?

    我想要最有效地更新大量 gt 100 000 文档 我的第一个天真的方法是在 JS 级别上进行 编写脚本 首先获取 ids 然后循环 ids 并通过 id 调用更新 完整 文档或 set 补丁 我遇到了内存问题 还将数据分成了最大块 500
  • mongodb 中的 $size 与条件

    我正在使用聚合从两个集合中获取值 一个是文件夹 另一个是检查 我正在获取所有数据 但检查计数为 0 我的代码 mongo folder aggregate lookup from inspections localField id fore
  • Mongodb 中的读自己写的一致性

    首先 这是Pymongo 文档 http api mongodb org python current examples requests html highlight read 20you 20own 20write 默认情况下 当线程首
  • 在mongodb中编辑子文档N-N关系

    我有一个应用程序 其中article可以链接到多个平台 文章包含平台列表 平台也包含文章列表 有关更多详细信息 请查看我几个月前提出的 stackoverflow 问题 https stackoverflow com a 40377383
  • 更新插入不适用于 updateOnebulkWrite v3.4

    我正在尝试批量写入一些更新 除了更新插入之外的所有内容都正常 我的代码完美地更新了所有项目 并且没有给出任何错误 这里的问题是批量插入updateOne没有更新插入 这是我的代码的未经测试和缩短的示例 因此您可能会发现一些语法错误 希望您明
  • 操作 `posts.find()` 缓冲在 10000 毫秒后超时

    当我在本地尝试时 效果非常好 但 Heroku 在服务器部署后出现此错误 有人可以帮忙吗 message Operation posts find buffering timed out after 10000ms index js con
  • mongodb c# 选择特定字段

    需要一些帮助来创建generic按名称选择字段的方法 像这样的东西 T GetDocField
  • Nodejs + mongodb:如何查询 $ref 字段?

    我将 MongoDB 与 Nodejs REST 服务一起使用 该服务公开了存储在其中的数据 我有一个关于如何查询使用 ref 的数据的问题 这是一个对象的示例 其中包含对花药集合中另一个对象 详细信息 的引用 id ObjectId 59
  • Perl Mongo 查找对象 ID

    你会认为这是一件简单的事情 我有一个集合中的对象 ID 列表 我想根据对象 ID 获取单个记录 谷歌搜索过 但没有任何帮助 所以我有对象 ID 5106c7703abc120a04070b34 my client MongoDB Mongo
  • 关于 mongodb java 驱动程序的困惑[重复]

    这个问题在这里已经有答案了 我是 MongoDB 的初学者 我正在使用 JAVA 驱动程序来使用它 我有以下代码 MongoClient client new MongoClient DB d client getDB world DBCo
  • 检查字段是否存在于数组的子文档中

    我有一个与此类似的架构 id Number line items id String quantity Number review request sent Boolean total price String name String or
  • 错误:子进程失败,退出,错误号 48

    错误 48 对我来说是一个新错误 我在尝试输入 mongo 时也遇到错误 Error network error while attempting to run command isMaster on host 127 0 0 1 2701
  • FieldPath 字段名称不能包含“.”当尝试使用 AGGREGATE 时

    我的查询有什么问题吗 db table aggregate match gt expr gt and gt eq gt size gt events 4 events 0 updated gt lt gt 2019 05 05 我越来越 M

随机推荐

  • 发送和接收短信以验证手机号码

    我正在尝试在不使用第三方的情况下进行手机号码验证 为此 我的逻辑是这样的 用户输入带有国家 地区代码的手机号码 当他们点击验证按钮时 意图将使用随机唯一 ID 向用户定义的手机号码发送一条短信 之后应用程序广播将等待 2 分钟 当它收到短信
  • Android 中的 Javascript“document.cookie”?

    我需要帮助如何正确使用 javascript 文档 cookie 或者 如何在 Android 网络浏览器中从 javascript 编写 cookie 我已确保在设置中启用了 cookie 当我检查时 通过使用 navigator coo
  • 是否可以在不使用 WMI 的情况下获取网络适配器的 PnPDeviceId?

    我一直在尝试使用 p invoke setupapi 调用获取给定网络适配器的 PnPDeviceId 但没有成功 我不情愿地决定使用 WMI 如下所示 public static string GetPnpDeviceId string
  • 汉明窗有什么用?

    我正在使用一些执行傅里叶变换的代码 以计算音频样本的倒谱 在计算傅里叶变换之前 它会对样本应用汉明窗 for int i 0 i lt SEGMENTATION LENGTH i timeDomain i float 0 53836 0 4
  • 有时 listView.getChildAt(int index) 返回 NULL (Android)

    我有一个带有自定义适配器的 listView 当发生某些事情 在子视图中单击 时 我会进行一些计算并修改子视图 如果满足某些条件 则应修改与单击的子项无关的其他子项 这有时有效 但有时失败 DDMS 说视图为空 让我向您展示代码 if in
  • 使用 AJAX/jQuery 加载页面和 History.pushState() 方法保留浏览器“后退”按钮功能

    我想在通过 AJAX jQuery 加载页面时保留后退按钮功能load方法 并通过将 URL 推送到浏览器栏history pushState方法 当单击浏览器后退按钮并且第一次单击仅恢复上一个 URL 但不加载上一个页面时 就会出现此问题
  • Extjs + D3:渲染冲突

    当我结合 Extjs 和 D3 时 我正在挖掘一些非常有趣的东西 一般来说 ExtJS渲染整个页面的主框架 D3渲染该框架中某个div的动态图 由于Extjs中的渲染逻辑相当复杂 因此我放置D3渲染逻辑的位置似乎至关重要 这里我尝试了两种
  • 从点制作 geopandas 数据框,然后投影 gpd,出现错误:无法转换朴素几何图形。请先在对象上设置一个crs

    我将带有纬度 经度的数据集转换为 geopandas 数据框 我们称之为 gpd gpd 没有 CRS 我试图使用以下命令将此 gpd 投影到 EPSG 3857 gpd gpd to crs EPSG 3857 我收到一条错误消息 无法转
  • ruby 默认参数习惯用法

    当您想要一个函数有一个默认参数 但该参数依赖于另一个参数 另一个变量时 Ruby 中的习惯用法是什么 例如 在Python中 一个例子是 def insort right a x lo 0 hi None if hi is None hi
  • 如何在 NSImageView 中实现 NSImage 的连续旋转?

    未来的观众 我已经成功完成了这个旋转动画 并且可以在问题上找到带有描述的代码 NSView 中的 NSImage 旋转不起作用 https stackoverflow com questions 10836131 nsimage rotat
  • 注册到 global.asax 的路由的替代位置

    最常见的做法是在 Application Start 事件中注册路由global asax cs vb文件 但您需要有权访问该文件才能执行此操作 美好的 我要么没有 要么不想 我正在尝试将 Asp net MVC 应用程序集成到 Share
  • 我如何解释 meminfo 中的所有内存?

    我试图理解如何meminfo跟踪记忆 这是我正在看的内容 MemTotal 341596 kB MemFree 147288 kB Buffers 56 kB Cached 46752 kB SwapCached 0 kB Active 8
  • Android - addToBackStack() 不起作用?

    这是负责将片段添加到返回堆栈的函数 public void populateContent File f ContentFragment cf new ContentFragment ctx ac this FragmentTransact
  • 在离子谷歌地图中添加多个标记

    我正在尝试将谷歌地图集成到离子项目中 并成功在离子页面上显示谷歌地图 但我想在这个谷歌地图上显示多个标记 尝试了不同的代码 但没有得到这个多个标记的东西 下面是我的代码 html
  • 如何使用脚本显示 Kendo Grid 的列菜单

    Kendo Grid 有一个非常漂亮的列上下文菜单 又名 columnMenu 您可以通过右键单击每个列标题来访问它 通过将 Kendo Grid 中的字段设置为以下内容来启用该菜单 列菜单 true 启用 columnMenu 后 它会在
  • 无法捕获 Apache Karaf 客户端输出

    我使用以下命令在服务器模式下启动了 Apache Karaf 3 0 0 KARAF HOME bin start在 CentOS 6 5 中 然后我想使用运行几个命令 KARAF HOME bin client并捕获这些命令的输出 以确保
  • 如何将 HTML 文档分解为电子书页面?

    对于 iPhone 电子书应用程序 我需要将任意长的 HTML 文档分解为完全适合一个屏幕的页面 如果我只是使用 UIWebView 来实现此目的 则最底部的行往往只会部分显示 其余部分会从视图边缘消失 因此 我假设我需要知道在给定源 HT
  • 如何测试为保存/恢复活动生命周期而构建的代码?

    如何测试以下所有方法代码 我想在所有场景都发生时播放场景 看看我的代码是否适用于活动的保存 恢复过程 那么我应该在模拟器中做什么来测试所有方法呢 public class Activity extends ApplicationContex
  • 启动时运行的程序而不位于启动文件夹中[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 某些程序 某种恶意软件 在启动时在我的 Windows 7 上运行 但我的启动文件夹是空的 即使在删除文件夹中所有程序的隐藏和系统属性之后
  • 如何使用 lambda 函数在 mongodb 中的两个集合之间进行多重连接?

    我有两个集合 1 user posts 2 user profile 找到以下采集数据供您参考 1 user posts集合 id ObjectId 5d519f861c9d4400005ebd1b userid ObjectId 5d51