我有两个集合1(RAM 2(详细信息。查找以下图片以获取您的参考。RAM收集详细信息
详细信息收集详细信息
在lambda函数中,当我通过事件中的等级时,我们将获得相关等级。但是我需要相同输出中的更多细节。
eg:当我通过等级事件10002时,我们将获得等级10002相关数据显示。但是我需要以及用户详细信息,例如Ramesh,Suresh
详细信息收集的详细信息。
def lambda_handler(event, context):
print("Received event: " + json.dumps(event, indent=1))
posts = db.user_posts
rankid = event['rank']
disposts = list(posts.find({"rank" : rankid}))
posts = json.dumps(disposts, default=json_util.default)
return json.loads(posts)
在以上代码中,我只会获得一个集合数据。我需要同一lambda功能的两个收集数据。
下面我的预期输出。
rank : 10002,
details:
0 : Object
username : "ramesh",
des : "developer",
edu : "b.tech",
age : 25
1 : Object
username : "suresh",
des : "admin",
edu : "mba",
age : 27
不完全是,我需要相似的输出。
您可以用适当的代码帮助我。谢谢
尝试以下查询:
db.getCollection('ram').aggregate([{ $match: { rank: '10002' } }, { $unwind: '$details' }, {
$lookup:
{
from: "details",
let: { userName: '$details.username' },
pipeline: [
{
$match:
{
$expr:
{
$eq: ['$$userName', '$username']
}
}
}
],
as: "user_details"
}
}, { $addFields: { 'user_details.des': '$details.des' } }, { $group: { _id: '$rank', details: { "$push": { $arrayElemAt: ["$user_details", 0] } } } }, { $project: { rank: '$_id', _id: 0, details: 1 } }])
也许您需要考虑存储 des ram> RAM collection 详细信息集合中的字段,这样,您只需用户名映射到用户名详细信息集合中的字段,这很容易。