mongodb - mongodb中有没有办法在多个级别进行分组
问题描述
我有一个文档,其中包含一个数组,如下所示。这是第一份文件。
{
"_id": "5d932a2178fdfc4dc41d75da",
"data": [
{
"nestedData": [
{
"_id": "5d932a2178fdfc4dc41d75e1",
"name": "Special 1"
},
{
"_id": "5d932a2178fdfc4dc41d75e0",
"name": "Special 2"
}
]
}
]
}
我需要在聚合框架的nestedData 数组中使用_id 查找(加入)另一个集合。
我需要查找的第二个文档是
{
"_id": "5d8b1ac3b15bc72d154408e1",
"status": "COMPLETED",
"rating": 4
}
我知道我需要 $unwind 两次才能将 nestedData 数组转换为对象。但是我如何再次分组以形成相同的对象,如下所示
{
"_id": "5d932a2178fdfc4dc41d75da",
"data": [
{
"array": [
{
"_id": "5d932a2178fdfc4dc41d75e1",
"name": "Special 1",
"data": {
"_id": "5d8b1ac3b15bc72d154408e1",
"status": "COMPLETED",
"rating": 4
},
{
"_id": "5d932a2178fdfc4dc41d75e0",
"name": "Special 2",
"data": {
"_id": "5d8b1ac3b15bc72d154408e0",
"status": "COMPLETED",
"rating": 4
},
}
]
}
]
}
解决方案
试试这个查询
db.testers.aggregate([
{$lookup: {
from: 'demo2',
pipeline: [
{ $sort: {'_id': 1}},
],
as: 'pointValue',
}},
{
$addFields:{
"data":{
$map:{
"input":"$data",
"as":"doc",
"in":{
$mergeObjects:[
"$$doc",
{
"nestedData":{
$map:{
"input":"$$doc.nestedData",
"as":"nestedData",
"in":{
$mergeObjects:[
{ $arrayElemAt: [ {
"$map": {
"input": {
"$filter": {
"input": "$pointValue",
"as": "sn",
"cond": {
"$and": [
{ "$eq": [ "$$sn._id", "$$nestedData._id" ] },
]
}
}
},"as": "data",
"in": {
"name": "$$nestedData.name",
"data":"$$data",
}}
}, 0 ] },'$$nestedData'
],
}
}
}
}
]
}
}
}
}
},
{$project: { pointValue: 0 } }
]).pretty()
推荐阅读
- javascript - 通过 iframe 拖放文件在 IE 11 中不起作用
- linux - 收到错误“make: *** No rule to make target ‘all’。停止。” 在安装 nagios 主机期间运行此命令“make all”时
- swift - 如何从正则表达式匹配中获取范围
- opencv - opencv_traincascade - samplOpenCV 错误:参数错误
- python - python 3:使用 mypy 进行类型推断?
- java - Hibernate SQL 混合来自不同表的两列值
- android - 切换活动时 AdMob 奖励视频中断
- c++ - MPI如何创建两个通信器
- curl - 使用 CURL 和 oauth2 上传文件
- python - ImportError:无法导入名称“SummaryWriter”