【发布时间】:2017-02-24 07:36:03
【问题描述】:
我有以下看起来像这样的 mongo 数据
{
eventType : "mousedown",
eventArgs : {
type : "touchstart",
elementId : "id1"
},
creationDateTime : ISODate("2017-02-24T07:05:49.986Z")
}
我编写了以下查询来执行组计数。
db.analytics.aggregate
(
{
$match :
{
$and :
[
{"eventArgs.type" : 'touchstart'},
{eventType : 'mousedown'},
{creationDateTime : {$gte : ISODate("2017-02-24T000:00:00.000Z")}}
]
}
},
{
$group :
{
_id :
{
"eventsArgs.elementId" : "$elementId"
},
count :
{
$sum : 1
}
}
}
);
我收到$group 的错误,其中指出
FieldPath field names may not contain '.'
如果我不能具体的 '.'在
$group :
{
_id :
{
"eventsArgs.elementId" : "$elementId"
},
这样做的正确方法是什么?
【问题讨论】:
-
你试过
"_id" : { "eventsArgs": { "elementId" : "$eventsArgs.elementId" } },吗? -
是的。它不会给出错误。但是,生成的结果是不希望的:
{ "_id" : { "eventsArgs" : { } }, "count" : 126311 }。我希望看到带有各种 elementId 的多个计数附加。 -
或简单地
{ "$group": { "_id": "$eventsArgs.elementId", "count": { "$sum": 1 } } }然后再添加一个$project管道以按照您想要的方式重塑输出? -
但是数据相当庞大(有5亿行)。我更喜欢先过滤,然后再按计数分组。
-
@CheokYanCheng 你运行的是什么版本的mongodb?
标签: mongodb