簡體   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