2016-11-11 47 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 
    } 
    ] 
} 

我想$projectauthors阵列,这样的回报将是这样的:

{ 
    "_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 
}