当一个字段是日期字段时,如何在MongoDB中按多个字段分组

当一个字段是日期字段时,如何在MongoDB中按多个字段分组,mongodb,Mongodb,我对MongoDB还是一个新手,我正在尝试找出当其中一个字段是计算日期字段时如何按多个字段分组: 我的数据如下(简化): 我知道我可以通过多个字段进行类似的分组: db.builds.aggregate( { $group: { _id: { build_result: "$build_result", job_name: "$job_name"}, build_duration: { $avg: "$build_duration" } } } ) 但是,如果尝试使

我对MongoDB还是一个新手,我正在尝试找出当其中一个字段是计算日期字段时如何按多个字段分组:

我的数据如下(简化):

我知道我可以通过多个字段进行类似的分组:

db.builds.aggregate(
   { $group: { _id: { build_result: "$build_result", job_name: "$job_name"},
           build_duration: { $avg: "$build_duration" } } }
)
但是,如果尝试使用$dayOfYear函数对日期进行分组,则会出现错误:

db.builds.aggregate(
   { $group: { _id: { build_result: "$build_result", $dayOfYear: "$build_timestamp"},
           build_duration: { $avg: "$build_duration" } } }
)
错误:

Error: Printing Stack Trace
    at printStackTrace (src/mongo/shell/utils.js:37:15)
    at DBCollection.aggregate (src/mongo/shell/collection.js:897:9)
    at (shell):1:11
Thu Jan 16 13:34:08.036 aggregate failed: {
    "errmsg" : "exception: the operator must be the only field in a pipeline object (at '$dayOfYear'",
    "code" : 15983,
    "ok" : 0
} at src/mongo/shell/collection.js:898

所需的输出将是按日期和按生成结果分组,并具有生成持续时间的平均值。提前感谢。

您需要使用
$dayOfYear
对象作为
\u id
中新字段的值,如下所示:

db.builds.aggregate(
{$组:{
_id:{
生成结果:“$build\u result”,
dayOfYear:{$dayOfYear:$build_timestamp}
},
构建持续时间:{$avg:$build\u duration}
} }
)
输出:

{
“结果”:[
{
“_id”:{
“构建结果”:“成功”,
“一年中的某一天”:15
},
“建造持续时间”:667075
}
],
“好”:1
}

您需要使用
$dayOfYear
对象作为
\u id
中新字段的值,如下所示:

db.builds.aggregate(
{$组:{
_id:{
生成结果:“$build\u result”,
dayOfYear:{$dayOfYear:$build_timestamp}
},
构建持续时间:{$avg:$build\u duration}
} }
)
输出:

{
“结果”:[
{
“_id”:{
“构建结果”:“成功”,
“一年中的某一天”:15
},
“建造持续时间”:667075
}
],
“好”:1
}

您需要使用
$dayOfYear
对象作为
\u id
中新字段的值,如下所示:

db.builds.aggregate(
{$组:{
_id:{
生成结果:“$build\u result”,
dayOfYear:{$dayOfYear:$build_timestamp}
},
构建持续时间:{$avg:$build\u duration}
} }
)
输出:

{
“结果”:[
{
“_id”:{
“构建结果”:“成功”,
“一年中的某一天”:15
},
“建造持续时间”:667075
}
],
“好”:1
}

您需要使用
$dayOfYear
对象作为
\u id
中新字段的值,如下所示:

db.builds.aggregate(
{$组:{
_id:{
生成结果:“$build\u result”,
dayOfYear:{$dayOfYear:$build_timestamp}
},
构建持续时间:{$avg:$build\u duration}
} }
)
输出:

{
“结果”:[
{
“_id”:{
“构建结果”:“成功”,
“一年中的某一天”:15
},
“建造持续时间”:667075
}
],
“好”:1
}
Error: Printing Stack Trace
    at printStackTrace (src/mongo/shell/utils.js:37:15)
    at DBCollection.aggregate (src/mongo/shell/collection.js:897:9)
    at (shell):1:11
Thu Jan 16 13:34:08.036 aggregate failed: {
    "errmsg" : "exception: the operator must be the only field in a pipeline object (at '$dayOfYear'",
    "code" : 15983,
    "ok" : 0
} at src/mongo/shell/collection.js:898