我正在使用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。但是,如果可以,有人可以告诉我如何使用它吗?
答案 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管道。