Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb mongo aggregate-通过查询每个字段值,将字段值中的ID数组扩展为完整对象_Mongodb_Mongodb Query_Aggregation Framework - Fatal编程技术网

Mongodb mongo aggregate-通过查询每个字段值,将字段值中的ID数组扩展为完整对象

Mongodb mongo aggregate-通过查询每个字段值,将字段值中的ID数组扩展为完整对象,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,在聚合中,患者具有组ID(字符串数组)。我已经筛选出我们需要保留的 我的下一步是将每一个对象展开为其位于groups集合中的完整对应对象。如何在此聚合中按id查询每个id并用其对象替换每个id .... $project: { patients: { patient_id: 1, group_ids: { how can I query the array of ids that I have as input, to become arrays of their

在聚合中,患者具有组ID(字符串数组)。我已经筛选出我们需要保留的

我的下一步是将每一个对象展开为其位于groups集合中的完整对应对象。如何在此聚合中按id查询每个id并用其对象替换每个id

....
$project: {
  patients: {
    patient_id: 1,
    group_ids: {
      how can I query the array of ids that I have as input, to become arrays of their corresponding objects?
    },
  },
},
...
[更新] 当然,输入和输出文档的期望会有所帮助:

输入:

{
  patient_id: "johndoe",
  group_ids: ['a', 'b']
}
分组表:

{
  group_id: 'a',
  description: 'groupA desc'
},
{
  group_id: 'b',
  description: 'groupB desc'
}
预期结果:

{
  patient_id: 'johndoe',
  groups: [
    {
      group_id: 'a',
      description: 'groupA desc'
    },
    {
      group_id: 'b',
      description: 'groupB desc'
    }
  ]  
}

更新

解决方案1:使用简单的b/w
患者
集合

db.patients.aggregate([
{
$lookup:{
来自:“团体”,
localField:“组\u ID”,
foreignField:“组id”,
as:“集团”
}
},
{
$project:{group_ID:0}
}
]);
解决方案2:与
管道
b/w
患者
集合一起使用

db.patients.aggregate([
{
$lookup:{
来自:“团体”,
let:{group_id:$group_id},
管道:[
{
$match:{
$expr:{
$in:[“$group\U id”、“$$group\U id”]
}
}
}
],
as:“集团”
}
},
{
$project:{group_ID:0}
}
]);
输出:

{
“_id”:ObjectId(“605dc2c29b7d5343d009539f”),
“患者id”:“johndoe”,
“团体”:[
{
“_id”:ObjectId(“605dc2c29b7d5343d00953a0”),
“组id”:“a”,
“说明”:“groupA desc”
},
{
“_id”:ObjectId(“605dc2c29b7d5343d00953a1”),
“组id”:“b”,
“说明”:“groupB说明”
}
]
}
旧答案

使用操作符并循环通过
组\u id
数组,在对象通过时构建对象。这就是您需要的:

$project:{
病人:{
病人编号:1,
组标识:{
$map:{
输入:“$group_ids”,
如:"集团",,
在:{
$cond:{
如果:{$in:['$$group','$group_ID_to_include']},
然后:{
组:“$$group”//根据需要生成对象。
},
你想干什么就干什么。
}
},
},
},
},
},

Plz发布一些带有预期输出的数据,以获得完整准确的答案。也许我不应该在问题中包含过滤部分。我上面的内容已经可以在组中过滤组了。我只想扩大剩下的部分。我在问题中加入了新的信息,以使这一点更加清楚。谢谢你再次感谢你!我已经从一个单独的集合(患者和组除外)中进行了查找,以获得管道中存在的内容。我需要这一步的输入是上一步的输入。我试着用各种方法在group_id字段中进行查找-可能吗?发布您的查询(如果问题仍然存在)不清楚您的意思。您已经解决了吗?我最后编写了一个单独的查询并通过代码注入对象。谢谢