java - Springboot GET API 在根据 Id 组合多个集合后显示来自多个集合的响应
问题描述
我正在使用 mongoDB 开发 Springboot 应用程序。我正在创建一个 GET API,它从数据库返回数据。我的要求是我想在组合来自多个集合的数据后返回响应,而不实际更改数据库数据或架构。
例如:
主要收藏:
{
_id: 123, name: abc, value: 132,
subCollectionDetails: {
subCollectionId : 1111-1111,
subCollectionOtherValues: "Some data",
}
},
{
_id: 124, name: fff, value: 132,
subCollectionDetails: {
subCollectionId : 1111-2222,
subCollectionOtherValues: "Some data",
}
}.
{
_id: 125, name: abc, value: 132,
subCollectionDetails: {
subCollectionId : 1111-3333,
subCollectionOtherValues: "Some data",
}
}
子集合 ID:
{
_id: 1111-1111,
subCollectionName : "sub1",
subCollectionPresent : True
}
{
_id: 1111-2222,
subCollectionName : "sub1",
subCollectionPresent : True
}
最终 GET API 响应 Response :
{
_id: 123, name: abc, value: 132,
subCollectionDetails: {
_id: 1111-1111,
subCollectionName : "sub1",
subCollectionPresent : True
subCollectionOtherValues: "Some data",
}
},
{
_id: 124, name: fff, value: 132,
subCollectionDetails: {
_id: 1111-2222,
subCollectionName : "sub1",
subCollectionPresent : True
subCollectionOtherValues: "Some data",
}
}.
{
_id: 125, name: abc, value: 132,
subCollectionDetails: {
}
}
解决方案
该查询应该返回你想要的:
db.main.aggregate([
{
$lookup: {
from: "sub",
localField: "subCollectionDetails.subCollectionId",
foreignField: "_id",
as: "sub_lookup"
}
},
{
$project: {
_id: true,
name: true,
value: true,
subCollectionDetails: {
$mergeObjects: [
"$subCollectionDetails",
{$arrayElemAt: ["$sub_lookup",0]}
]
}
}
},
{
$project: {
"subCollectionDetails.subCollectionId": false
}
}
])
推荐阅读
- javascript - 使用 MediaElementPlayer 在 Safari 上构建播放列表时出错
- python - 制作两列的分布直方图
- java - 如何在springboot服务器中托管角度构建文件?
- sql - 如何格式化 SQL 字符串以进行排序
- python - Nuitka 无法打开 .py 文件进行编译
- android - 操作系统更新后,Flutter 应用程序在 VIVO 设备上停留在 ********************* 上的 Observatory Listening
- java - 使用 Nexus 配置 Maven 代理
- php - 如何将多个值推入数组?
- amazon-cloudformation - 如何在模板文件中为 CloudFront 函数设置 FunctionCode 属性?
- javascript - Select2“全选”勾选从数据库表中获取选项的位置