繁体   English   中英

$unwind 嵌入文档中存在多个 arrays 并将每个数组显示为单个文档,如 mongoDB 中的 output

[英]$unwind multiple arrays present in the embedded documents and show each array as single document as output in mongoDB

参考下面的代码。 在此,现场场景是一个嵌入式文档,其中包含 arrays,我想在 output 中将每个数组展示为单个文档。 请注意,每个数组都包含嵌入的文档,因此获取从中提取字段的代码也会很有帮助。 我没有使用 java 进行查询。 将使用将集成的外部 BI 应用程序。我还应该提到我正在使用 NoSQLBooster 为 MongoDB 应用程序创建这些查询。

{
    "_id": {
        "$oid": ""
    },
    "organisationId": "",
    "bcpId": "",
    "bcpName": "",
    "bcpDescription": "",
    "biaEntity": {},
    "version": "0.01",
    "status": "PENDING",
    "primaryBridgeNumber": "1",
    "alternateBridgeNumber": "2",
    "scenario": [{
        "_id": {
            "$oid": "5e3ab709367d2c5f5826c6fd"
        },
        "scenario": "",
        "strategies": [{
            "mdmStrategy": {},
            "strategy": {
                "pSIStrategyDetails": {
                    "scenarioName": "",
                    "strategyName": "",
                    "rto": "",
                    "sustainablePeriod": {

                    },
                    "description": "1",
                    "primaryContact": {
                    },
                    "secondaryContact": {
                    },
                    "recoverySite": {

                    }
                },
                "pSICriticalStaff": {},
                "specialRequirement": [{

                }, {

                }, {

                }, {

                }, {

                }]
            },
            "createdOn": {},
            "updatedOn": {}
        }, {
            "mdmStrategy": {},
            "strategy": {
                "pSIStrategyDetails": {},
                "pSICriticalStaff": {},
                "specialRequirement": [{
                },
                 {
                },
                 {
                },
                 {                  
                }, 
                {

                }]
            },
            "createdOn": {},
            "updatedOn": }
        }],
        "description": "",
        "status": "Active",
        "createdOn": {},
        "updatedOn": {}
    }],
    "updatedOn": {},
    "createdOn": {},
    "business_owner_id": {},
    "bc_coordinator_id": {},
    "backup_business_owner_id": {},
    "backup_business_coordinator_id": {},
    "sme_id": {},
    "_class": "com.bcm.bcp.api.model.BcmBcpEntity"
}

预期 output:

{{
"bcpId": "",
"bcpName": "",
"bcpDescription": "",
"version": "0.01",
"status": "PENDING",
"scenario.scenario":"---",
"scenario.strategies.strategy.strategyName":"---",
"scenario.strategies.strategy.rto":"---",
etc...
}{
"bcpId": "",
"bcpName": "",
"bcpDescription": "",
"version": "0.01",
"status": "PENDING",
"scenario.scenario":"---",
"scenario.strategies.strategy.strategyName":"---",
"scenario.strategies.strategy.rto":"---",
etc...
}{
"bcpId": "",
"bcpName": "",
"bcpDescription": "",
"version": "0.01",
"status": "PENDING",
"scenario.scenario":"---",
"scenario.strategies.strategy.strategyName":"---",
"scenario.strategies.strategy.rto":"---",
etc...
}}

"scenario.scenario":"---","scenario.strategies.strategy.strategyName":"---", "scenario.strategies.strategy.rto":"---",

将来自 arrays 因此 output 将是数组中存在的元素数

你希望这是你想要的:

db.collection.aggregate([
  {
    $unwind: "$scenario"
  },
  {
    $unwind: "$scenario.strategies"
  },
  {
    $project: {
      bcpId: 1,
      bcpName: 1,
      bcpDescription: 1,
      version: 1,
      status: 1,
      scenario: {
        scenario: 1,
        strategies: {
          strategy: {
            pSIStrategyDetails: {
              rto: 1,
              strategyName: 1
            }
          }
        }
      }
    }
  }
])

Output:

[
  {
    "_id": ObjectId("5a934e000102030405000000"),
    "bcpDescription": "",
    "bcpId": "",
    "bcpName": "",
    "scenario": {
      "scenario": "",
      "strategies": {
        "strategy": {
          "pSIStrategyDetails": {
            "rto": "",
            "strategyName": ""
          }
        }
      }
    },
    "status": "PENDING",
    "version": "0.01"
  },
  {
    "_id": ObjectId("5a934e000102030405000000"),
    "bcpDescription": "",
    "bcpId": "",
    "bcpName": "",
    "scenario": {
      "scenario": "",
      "strategies": {
        "strategy": {
          "pSIStrategyDetails": {}
        }
      }
    },
    "status": "PENDING",
    "version": "0.01"
  }
]

说明:您需要使用 2 个$unwind运算符,因为它类似于 arrays 的 arrays 和一个$project运算符来仅显示您需要的那些字段。

MongoPlayGroundLink

PS - 这个问题还不清楚。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM