2016-11-11 15 views
2

MongoDBの集約パイプラインを使用して、私が望む形で文書を取得しています。集約の最後のステップとして、私は$projectを使用して文書を最終形式にします。MongoDBで配列を投影する

しかし、私は問題を投げて、サブドキュメントの配列を持っています。ここで私は現在、aggrgationから得るものです:

{ 
    "_id": "581c8c3df1325f68ffd23386", 
    "count": 14, 
    "authors": [ 
    { 
     "author": { 
     "author": "57f246b9e01e6c6f08e1d99a", 
     "post": "581c8c3df1325f68ffd23386" 
     }, 
     "count": 13 
    }, 
    { 
     "author": { 
     "author": "5824382511f16d0f3fd5aaf2", 
     "post": "581c8c3df1325f68ffd23386" 
     }, 
     "count": 1 
    } 
    ] 
} 

私はリターンがこのなるようauthors配列を$projectたい:

{ 
    "_id": "581c8c3df1325f68ffd23386", 
    "count": 14, 
    "authors": [ 
    { 
     "_id": "57f246b9e01e6c6f08e1d99a", 
     "count": 13 
    }, 
    { 
     "_id": "5824382511f16d0f3fd5aaf2", 
     "count": 1 
    } 
    ] 
} 

がどのように私はそれを達成するために行きますか?

+1

が親切に集約パイプラインとテストのためのいくつかのサンプル文書を含むようにあなたの質問を編集することですか? – chridam

答えて

1

アレイを巻き戻して、投射後に再び巻き戻すことができます。このような 何か:

db.collectionName.aggregate([ 
{$unwind:'$authors'}, 
{$project:{_id:1,count:1,'author.id':'$authors.author.author','author.count':'$authors.count'}}, 
{$group:{_id:{_id:'$_id',count:'$count'},author:{$push:{id:'$author.id',count:'$author.count'}}}}, 
{$project:{_id:0,_id:'$_id._id',count:'$_id.count',author:1}} 
]) 

上記の出力は次のようになります。

{ 
    "_id" : "581c8c3df1325f68ffd23386", 
    "author" : [ 
     { 
      "id" : "57f246b9e01e6c6f08e1d99a", 
      "count" : 13.0 
     }, 
     { 
      "id" : "5824382511f16d0f3fd5aaf2", 
      "count" : 1.0 
     } 
    ], 
    "count" : 14.0 
} 
関連する問題