聚合时如何在项目中逐个列出所有字段?

时间:2017-08-15 00:43:40

标签: mongodb mongodb-query

我正在使用Mongo 3.2.14

我有一个mongo集合,如下所示:

{
'_id':...
'field1':...
'field2':...
'field3':...
etc...
}

我想以这种方式聚合:

db.collection.aggregate{
                        '$match':{},
                        '$project':{
                                    'field1':1,
                                    'field2':1,
                                    'field3':1,
                                    etc...(all fields)
                                    }
                        }

有没有办法在项目中包含所有字段而不逐一列出每个字段? (我有大约30个领域,而且还在增长......)

我在这里找到了相关信息:

MongoDB $project: Retain previous pipeline fields

Include all existing fields and add new fields to document

how to not write every field one by one in project

但是,我使用mongo 3.2.14并且我不需要创建新字段,因此,我认为我不能使用$ addFields。但是,如果可以,有人可以告诉我如何使用它吗?

2 个答案:

答案 0 :(得分:6)

基本上,如果您希望将文档的所有属性传递到下一个管道,则可以跳过$ project管道。但如果你想要除" _id"之外的所有属性那么你可以通过

{ $project: { _id: 0 } }

将返回除_id之外的所有值。

如果您有任何想要展平的嵌入列表或嵌套,您可以使用$ unwind管道

答案 1 :(得分:2)

您可以使用$ replaceRoot

<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.min.js"></script>
<canvas id="dailyWorkingHoursChart" height="80"></canvas>

通过这种方式,您可以获得与文档中所有字段一起返回的确切文档...您不需要在$ project中一个一个地添加每个字段...尝试在末尾使用$ replaceRoot管道。