当前位置: 首页 > 知识库问答 >
问题:

mongodb中有没有一种方法可以在多个级别进行分组

汪皓
2023-03-14

我有一个文档,它包含一个数组,如下所示。这是第一份文件。

{
  "_id": "5d932a2178fdfc4dc41d75da",
  "data": [
    {
      "nestedData": [
        {
          "_id": "5d932a2178fdfc4dc41d75e1",
          "name": "Special 1"
        },
        {
          "_id": "5d932a2178fdfc4dc41d75e0",
          "name": "Special 2"
        }
      ]
    }
  ]
}

我需要在聚合框架中用nestedData数组中的_id查找(连接)到另一个集合。

{
  "_id": "5d8b1ac3b15bc72d154408e1",
  "status": "COMPLETED",
  "rating": 4
}
{
  "_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
          },
        }
      ]
    }
  ]
}

共有1个答案

吴高远
2023-03-14

请尝试此查询

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()
 类似资料:
  • 问题内容: 假设我有以下代码: 这段代码的问题在于,协程内部的循环永远不会完成第一次迭代,而大小会不断增加。 为什么会这样发生,我该怎么解决? 我无法摆脱单独的线程,因为在我的真实代码中,我使用了单独的线程与串行设备进行通信,而且我还没有找到使用的方法。 问题答案: 不是线程安全的,因此您不能直接在多个线程中直接使用它。相反,您可以使用,它是提供线程感知队列的第三方库: 还有(全披露:我写了它),

  • 问题内容: 我有一个.csv文件,如下所示: 我必须从文件中删除重复的电子邮件(整行)(即,上面示例中包含的行之一)。如何仅在字段1(用逗号分隔)上使用?根据,没有列选项。 我尝试了一些东西,但是没有用。 问题答案: 为了独特 所以逗号是定界符 对于关键字段1 测试结果:

  • 问题内容: 如果输入大小太小,则库会自动序列化 流中地图的执行,但是这种自动化不会并且也不会考虑地图操作的繁重程度。有没有办法 强制parallelStream()实际并行化CPU重映射? 问题答案: 似乎存在根本的误解。链接的“问答”讨论了由于OP没有 看到预期的加速,流显然不能并行工作。结论是,有没有好处在 并行处理工作负载是否太小,不,有一个自动回退到顺序执行。 实际上是相反的。如果您请求并

  • 问题内容: 嗨,我想使用WMI类来查找应用程序和产品信息。但是问题是我想使用Java或任何脚本语言(如python,javascript或perl)。我听说过JWMI,这可能是一个选择。有人可以帮我吗??? 问题答案: JavaScript和Java不是一回事。 JavaScript Windows脚本宿主(WSH)下提供了JavaScript。有了它,访问WMI相当容易: jWMI(Java)

  • c#中的等价物是: 我只评论了一行的一部分,这样我就不会忘记我做的小加法,我可以通过删除/*和*/来重新激活它 我想在Excel的VBA中也这样做: 我认为没有办法直接做到这一点。尽管如此,能够评论部分内容还是非常有用的。。。 有没有办法至少模拟一下?