MongoDB 无法从 _id 投影字符串值
MongoDB cannot project string value from _id
我有一个聚合来从 "share" 操作集合中提取指标。这些指标按日期和平台(twitter、pintrest 等)分组。每个阶段都工作正常,除了在 $project
阶段格式化输出时,我似乎无法在我的输出中投影 platform
字符串。我仍然在 _id 中看到它,但是我无法将它投影到其他字段。
汇总如下:
{
$unwind: "$platforms"
},
{
$project: {
day: {$dayOfMonth: "$created_at"},
month: {$month: "$created_at"},
year: {$year: "$created_at"},
platforms: 1
}
},
{
$group: {
_id: {
platorms: "$platforms",
day: "$day",
month: "$month",
year: "$year"
},
count: {$sum: 1}
}
},
{
$project: {
day: "$_id.day",
month: "$_id.month",
year: "$_id.year",
platform: "$_id.platforms",
count: 1
}
}
下面的输出是:
{
"result" : [
{
"_id" : {
"platorms" : "EMAIL",
"day" : 28,
"month" : 4,
"year" : 2015
},
"count" : 1,
"day" : 28,
"month" : 4,
"year" : 2015
},
{
"_id" : {
"platorms" : "EMAIL",
"day" : 27,
"month" : 4,
"year" : 2015
},
"count" : 10,
"day" : 27,
"month" : 4,
"year" : 2015
},
{
"_id" : {
"platorms" : "SMS",
"day" : 27,
"month" : 4,
"year" : 2015
},
"count" : 1,
"day" : 27,
"month" : 4,
"year" : 2015
},
{
"_id" : {
"platorms" : "FACEBOOK",
"day" : 27,
"month" : 4,
"year" : 2015
},
"count" : 1,
"day" : 27,
"month" : 4,
"year" : 2015
}, ...
日、月、年的整数项目很好,但平台不行。
这是因为在您的 $group
阶段您有复合 _id
和 platorms: "$platforms"
(字段名称中缺少 f
)并且您正在投影 $_id.platforms
在你最后的 $project
阶段,因为这样的字段不存在,你不会得到任何结果。您还可以使用 _id: 0
排除 _id
字段。
将您的 $group
阶段更改为:
{
$group: {
_id: {
platforms: "$platforms",
day: "$day",
month: "$month",
year: "$year"
},
count: {$sum: 1}
}
}
我有一个聚合来从 "share" 操作集合中提取指标。这些指标按日期和平台(twitter、pintrest 等)分组。每个阶段都工作正常,除了在 $project
阶段格式化输出时,我似乎无法在我的输出中投影 platform
字符串。我仍然在 _id 中看到它,但是我无法将它投影到其他字段。
汇总如下:
{
$unwind: "$platforms"
},
{
$project: {
day: {$dayOfMonth: "$created_at"},
month: {$month: "$created_at"},
year: {$year: "$created_at"},
platforms: 1
}
},
{
$group: {
_id: {
platorms: "$platforms",
day: "$day",
month: "$month",
year: "$year"
},
count: {$sum: 1}
}
},
{
$project: {
day: "$_id.day",
month: "$_id.month",
year: "$_id.year",
platform: "$_id.platforms",
count: 1
}
}
下面的输出是:
{
"result" : [
{
"_id" : {
"platorms" : "EMAIL",
"day" : 28,
"month" : 4,
"year" : 2015
},
"count" : 1,
"day" : 28,
"month" : 4,
"year" : 2015
},
{
"_id" : {
"platorms" : "EMAIL",
"day" : 27,
"month" : 4,
"year" : 2015
},
"count" : 10,
"day" : 27,
"month" : 4,
"year" : 2015
},
{
"_id" : {
"platorms" : "SMS",
"day" : 27,
"month" : 4,
"year" : 2015
},
"count" : 1,
"day" : 27,
"month" : 4,
"year" : 2015
},
{
"_id" : {
"platorms" : "FACEBOOK",
"day" : 27,
"month" : 4,
"year" : 2015
},
"count" : 1,
"day" : 27,
"month" : 4,
"year" : 2015
}, ...
日、月、年的整数项目很好,但平台不行。
这是因为在您的 $group
阶段您有复合 _id
和 platorms: "$platforms"
(字段名称中缺少 f
)并且您正在投影 $_id.platforms
在你最后的 $project
阶段,因为这样的字段不存在,你不会得到任何结果。您还可以使用 _id: 0
排除 _id
字段。
将您的 $group
阶段更改为:
{
$group: {
_id: {
platforms: "$platforms",
day: "$day",
month: "$month",
year: "$year"
},
count: {$sum: 1}
}
}