聚合时如何自动添加除一个字段外的所有字段?
How to automatically add all fields except one when doing aggregation?
我有一个 mongodb collection,其中包含 object 多个属性(可能很多)。其中一个是另一个 object 类型的数组,这个类型有一个布尔值 属性 StateChanged
.
我想查询返回此 collection 中的所有记录,并过滤数组以仅获取包含 StateChanged = true
的文档。
这是我已经做过的:
db.getCollection('Cycles').aggregate([
{
$project: {
_id: 0,
// Here I could add Field1: 1, Field2: 1,...
'Subcycles' : {
$filter : {
input: '$Subcycles',
as : 'sub',
cond: { $eq: ['$$sub.StateChanged',true]}
}
}
}
}
])
然而这只会给我带来 "Subcycles" collection。
我想要的是在根文档中包含其他字段。
我可以在投影中手动指定它们(如 Field1: 1, Field2: 1,...),但由于可能有很多字段,我想知道是否有办法将它们全部带入自动。
提前致谢!
您可以使用 $addFields
instead of $project
。它会自动用现有字段替换新字段。
db.getCollection("Cycles").aggregate([
{ "$addFields": {
"Subcycles": {
"$filter": {
"input": "$Subcycles",
"as": "sub",
"cond": { "$eq": ["$$sub.StateChanged", true] }
}
}
}},
{ "$project" : { "_id": 0 }}
])
您可以使用$addFields and then use $project排除_id
字段:
db.getCollection('Cycles').aggregate([
{
$addFields: {
'Subcycles' : {
$filter : {
input: '$Subcycles',
as : 'sub',
cond: { $eq: ['$$sub.StateChanged',true]}
}
}
}
},
{
$project: {
_id: 0
}
}
])
我有一个 mongodb collection,其中包含 object 多个属性(可能很多)。其中一个是另一个 object 类型的数组,这个类型有一个布尔值 属性 StateChanged
.
我想查询返回此 collection 中的所有记录,并过滤数组以仅获取包含 StateChanged = true
的文档。
这是我已经做过的:
db.getCollection('Cycles').aggregate([
{
$project: {
_id: 0,
// Here I could add Field1: 1, Field2: 1,...
'Subcycles' : {
$filter : {
input: '$Subcycles',
as : 'sub',
cond: { $eq: ['$$sub.StateChanged',true]}
}
}
}
}
])
然而这只会给我带来 "Subcycles" collection。 我想要的是在根文档中包含其他字段。
我可以在投影中手动指定它们(如 Field1: 1, Field2: 1,...),但由于可能有很多字段,我想知道是否有办法将它们全部带入自动。
提前致谢!
您可以使用 $addFields
instead of $project
。它会自动用现有字段替换新字段。
db.getCollection("Cycles").aggregate([
{ "$addFields": {
"Subcycles": {
"$filter": {
"input": "$Subcycles",
"as": "sub",
"cond": { "$eq": ["$$sub.StateChanged", true] }
}
}
}},
{ "$project" : { "_id": 0 }}
])
您可以使用$addFields and then use $project排除_id
字段:
db.getCollection('Cycles').aggregate([
{
$addFields: {
'Subcycles' : {
$filter : {
input: '$Subcycles',
as : 'sub',
cond: { $eq: ['$$sub.StateChanged',true]}
}
}
}
},
{
$project: {
_id: 0
}
}
])