2017-09-07 6 views
0

私はこのデータをMongoDBに持っています。このデータを基にして、同じIDの下ですべての追跡番号を単一の配列形式で取得したいと思います。mongodbでgroup byを実行する方法

* 1 */ 
{ 
    "_id" : ObjectId("597056182a93692b4c7691bf"), 
    "Sid":1, 
    "Carriers" : [ 
     { 
      "Tracking" : [ 
       { 
        "TrackingNo" : "121_dom" 
       } 
      ] 
     }, 
     { 
      "Tracking" : [ 
       { 
        "TrackingNo" : "779591314278" 
       }, 
       { 
        "TrackingNo" : "779591314039" 
       }, 
       { 
        "TrackingNo" : "779591314231" 
       } 
      ] 
     } 
    ] 
} 

/* 2 */ 
{ 
    "_id" : ObjectId("597057338c65c002e4285fb3"), 
    "Sid":2,  
    "Carriers" : [ 
     { 
      "Tracking" : [ 
       { 
        "TrackingNo" : "122_dom" 
       } 
      ] 
     }, 
     { 
      "Tracking" : [ 
       { 
        "TrackingNo" : "77959131427" 
       }, 
       { 
        "TrackingNo" : "77959131403" 
       } 
      ] 
     } 
    ] 
} 

/* 3 */ 
{ 
    "_id" : ObjectId("5980ae7ecc71b581b626d20b"), 
    "Sid":3,  
    "Carriers" : [ 
     { 
      "Tracking" : [ 
       { 
        "TrackingNo" : "123_dom" 
       } 
      ] 
     }, 
     { 
      "Tracking" : [ 
       { 
        "TrackingNo" : "77959131408" 
       }, 
       { 
        "TrackingNo" : "779591314059" 
       }, 
       { 
        "TrackingNo" : "779591315551" 
       } 
      ] 
     } 
    ] 
} 

すなわち、単一のアレイに同じ_id下のすべてのトラッキング番号を示しており、_idの操作によってグループを行う上で、結果セットはこのようなことを意味:あなたは配列を有するよう

{ 
    "_id" : ObjectId("597056182a93692b4c7691bf"), 
    "Sid":1,  
    "Carriers" : [ 
     { 
      "Tracking" : [ 
       { 
        "TrackingNo" : "121_dom" 
       } 
       { 
        "TrackingNo" : "779591314278" 
       }, 
       { 
        "TrackingNo" : "779591314039" 
       }, 
       { 
        "TrackingNo" : "779591314231" 
       } 
      ] 
     } 
    ] 
} 
+1

あなたが試したことをお知らせください – sidgate

+0

ここで私が使ったクエリは です。db.getCollection( '出荷')。 : '$ Carriers'})。pretty(); – user1903796

+0

[MongoDB:ネストされた配列を1つのドキュメントにグループ化する方法は?](https://stackoverflow.com/questions/46450119/mongodb-how-to-group-nested-arrays-in-one-document) – sidgate

答えて

0

配列内では、最初に2回巻き戻してから再度グループ化する必要があります。次のクエリが機能するはずです。必要に応じて$ groupと$ projectに追加のフィールドを投影する必要があります。

0

上記の説明によれば、以下の集約クエリを上記の質問の解決策としてMongoDBシェルに実行してみてください。

db.shipments.aggregate(

// Pipeline 
[ 
    // Stage 1 
    { 
     $unwind: { 
      path: '$Carriers' 
     } 
    }, 

    // Stage 2 
    { 
     $unwind: { 
      path: '$Carriers.Tracking' 
     } 
    }, 

    // Stage 3 
    { 
     $group: { 
      _id: { 
       _id: '$_id', 
       Sid: '$Sid' 
      }, 
      Carriers: { 
       $addToSet: { 
        TrackingNo: '$Carriers.Tracking.TrackingNo' 
       } 
      } 

     } 
    }, 

    // Stage 4 
    { 
     $group: { 
      _id: '$_id', 
      Carriers: { 
       $addToSet: { 
        Tracking: '$Carriers' 
       } 
      } 
     } 
    }, 

    // Stage 5 
    { 
     $project: { 
      _id: '$_id._id', 
      Sid: '$_id.Sid', 
      Carriers: '$Carriers' 
     } 
    } 

] 

);

関連する問題