2017-09-27 6 views
0

私は、次のコレクションを持っている:MongoDB:ネストされた配列を1つのドキュメントにグループ化するにはどうすればいいですか?

{ 
    id: 23423-dsfsdf-32423, 
    name: Proj1, 
    services: [ 
     { 
      id:sdfs-24423-sdf, 
      name:P1_Service1, 
      products:[{},{},{}] 
     }, 
     { 
      id:sdfs-24jhh-sdf, 
      name:P1_Service2, 
      products:[{},{},{}] 
     }, 
     { 
      id:sdfs-2jnbn3-sdf, 
      name:P1_Service3, 
      products:[{},{},{}] 
     } 
    ] 
}, 
{ 
    id: 23423-cxcvx-32423, 
    name: Proj2, 
    services: [ 
     { 
      id:sdfs-xvxcv-sdf, 
      name:P2_Service1, 
      products:[{},{},{}] 
     }, 
     { 
      id:sdfs-xvwqw-sdf, 
      name:P2_Service2, 
      products:[{},{},{}] 
     }, 
     { 
      id:sdfs-erdfd-sdf, 
      name:P2_Service3, 
      products:[{},{},{}] 
     } 
    ] 
} 

私は、すべてのサービスの配列で文書を返却する必要があります。

{ 
    services: [ 
     { 
      id:sdfs-24423-sdf, 
      name:P1_Service1, 
      products:[{},{},{}] 
     }, 
     { 
      id:sdfs-24jhh-sdf, 
      name:P1_Service2, 
      products:[{},{},{}] 
     }, 
     { 
      id:sdfs-2jnbn3-sdf, 
      name:P1_Service3, 
      products:[{},{},{}] 
     }, 
     { 
      id:sdfs-xvxcv-sdf, 
      name:P2_Service1, 
      products:[{},{},{}] 
     }, 
     { 
      id:sdfs-xvwqw-sdf, 
      name:P2_Service2, 
      products:[{},{},{}] 
     }, 
     { 
      id:sdfs-erdfd-sdf, 
      name:P2_Service3, 
      products:[{},{},{}] 
     } 
    ] 
} 

私が得た最もだった:

db.projects.aggregate({"$group":{"_id":"services","services":{"$push":"$services"}}}) 

しかし、この配列の配列を持つドキュメントを返します。オブジェクトの配列が必要です。

{ 
    _id:"services", 
    services:[ 
     [ 
      { 
      id:sdfs-24423-sdf, 
      name:P1_Service1, 
      products:[{},{},{}] 
     }, 
     { 
      id:sdfs-24jhh-sdf, 
      name:P1_Service2, 
      products:[{},{},{}] 
     }, 
     { 
      id:sdfs-2jnbn3-sdf, 
      name:P1_Service3, 
      products:[{},{},{}] 
     } 
     ], 
     [ 
      { 
      id:sdfs-xvxcv-sdf, 
      name:P2_Service1, 
      products:[{},{},{}] 
     }, 
     { 
      id:sdfs-xvwqw-sdf, 
      name:P2_Service2, 
      products:[{},{},{}] 
     }, 
     { 
      id:sdfs-erdfd-sdf, 
      name:P2_Service3, 
      products:[{},{},{}] 
     } 
     ] 
    ] 
} 

私は配列の集約や結合や結合などを把握することができません。 は最終的に私が...製品の一つ配列としてすべてのプロジェクトのすべてのサービスのすべての製品を取得(もの製品について同じことを行うと、サーバーが、まず最初に文書を返却する必要があります

10倍

答えて

2

あなたはすべてのservices 1つの文書にまとめられますようにnull_id上のグループにする必要があります。 も$unwindグループ化する前に、サービスの配列を、他のグループは、配列

db.project.aggregate(
    {$unwind: '$services'}, 
    {$group: {_id:null, services: {$push: '$services'}}} 
) 
+0

10倍、完璧のあなたの配列を与えるだろう... – Erez

関連する問題