我有以下 mongo 数据,看起来像这样
{
eventType : "mousedown",
eventArgs : {
type : "touchstart",
elementId : "id1"
},
creationDateTime : ISODate("2017-02-24T07:05:49.986Z")
}
Run Code Online (Sandbox Code Playgroud)
我编写了以下查询来执行组计数。
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
}
}
}
);
Run Code Online (Sandbox Code Playgroud)
我收到错误$group,说明
FieldPath field names may not contain '.'
Run Code Online (Sandbox Code Playgroud)
如果我不能指定'.' 在
$group :
{
_id :
{
"eventsArgs.elementId" : "$elementId"
},
Run Code Online (Sandbox Code Playgroud)
这样做的正确方法是什么?
由于您只有一个组字段,因此最好的方法是仅_id在该字段上使用组键,然后创建另一个$project管道,将_id前一个管道中的键重新整形为所需的子文档。例如
db.analytics.aggregate([
{
"$match": {
"eventArgs.type": 'touchstart',
"eventType": 'mousedown',
"creationDateTime": { "$gte": ISODate("2017-02-24T000:00:00.000Z") }
}
},
{
"$group": {
"_id": "$eventArgs.elementId",
"count": { "$sum": 1 }
}
},
{
"$project": {
"eventsArgs.elementId": "$_id",
"count": 1, "_id": 0
}
}
]);
Run Code Online (Sandbox Code Playgroud)
以下内容也应该有效:
db.analytics.aggregate([
{
"$match": {
"eventArgs.type": 'touchstart',
"eventType": 'mousedown',
"creationDateTime": { "$gte": ISODate("2017-02-24T000:00:00.000Z") }
}
},
{
"$group": {
"_id": {
"eventArgs": {
"elementId": "$eventArgs.elementId"
}
},
"count": { "$sum": 1 }
}
}
]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21409 次 |
| 最近记录: |