【发布时间】:2016-01-05 22:00:13
【问题描述】:
我的应用中有一个动作集合,它具有以下对象结构:
{
"type" : "evMove",
"userId" : "55fbbb2a34d594085988aa70",
"data" : {
"evId" : "55fdaa53cca301f758f4023d",
"moveId" : "55fdaa53cca301f758f4023f"
}
},
{
"type" : "game",
"userId" : "55fgdfa34d594085988aa70",
"data" : {
...
}
},
{
"type" : "evMove",
"userId" : "55fbbb2aasd34d595988aa60",
"data" : {
"evId" : "55fdaa53cca301f758f4023d",
"moveId" : "55fdaa53cca301f758f4023f"
}
},
{
"type" : "evMove",
"userId" : "55fbbb2a34d594085988aa30",
"data" : {
"evId" : "55fdaa53cca301f758f4023d",
"moveId" : "55fdaa53cca301f758f4023g"
}
}
我需要在 mongodb 和 mongoose 中返回一个返回以下内容的结果:
for event id: 55fdaa53cca301f758f4023d
moveId:55fdaa53cca301f758f4023d, count:2
moveId:55fdaa53cca301f758f4023g, count:1
如果我在 javascript 中执行此操作并且没有 group by like 查询,这意味着以下内容:
db.actions.find({'type':'evMove','data.evId':'55fdaa53cca301f758f4023d'})
resultArray = {
55fdaa53cca301f758f4023d : 0,
55fdaa53cca301f758f4023g : 0
};
results.forEach(function(res){
resultArray[res.data.evMove]++;
);
我怎样才能在 mongodb 和 mongoose 中或多或少地为我提供我想要的结果(移动和计数)?
【问题讨论】:
-
那你想要什么?它是每个不同
evId值的不同moveId值的计数吗? -
是的!就你所说的,它将在我的查询中更具体,这意味着,仅适用于一个 evId,而不适用于我的所有操作表 evIds...
-
我有一个 evId,为此我假设有 4 个选项供用户选择(moveId),我只想计算有多少用户选择了一个动作而不是另一个动作,仅用于一个一次 evId
标签: mongodb mongoose mongodb-query aggregation-framework