我有一个包含此类数据的集合
{"uid":"uirerb68624gdbnxcc", "location": "AA", "hit": "foodcat", "aggdone": "n"}
{"uid": "hdbhdhu7347fhdufh", "location": "BB", "hit": "travelcat", "aggdone": "n"}
{"uid": "uirerb68624gdbnxcc", "location": "CC", "hit": "travelcat", "aggdone": "n"}
因此,您可以看到有一个用户比其他用户拥有更多“点击”。您建议我如何处理上面的这些数据并将它们推送到不同的集合中(我可以每周自由一次。我不需要实时),如下所示。
{"uid" : "uirerb68624gdbnxcc", "total_hits": 2}
{"uid" : "hdbhdhu7347fhdufh", "total_hits": 1}
另外,有一点非常重要,如果您看到第一个集合,则会有一个名为“aggdone”的密钥。它应该作为一个标志,并应标记为“y”处理所有数据。因此,下周我开始做同样的过程时,我不会处理所有数据。
请帮帮我。此外,欢迎任何有关数据设计的建议/意见。
提前致谢。
Mongo版本2.4.8
回应评论------
我有一个包含如下文档的集合。
{
"gpcId": "CGP_52400c5e301d5",
"storageCreateTime": "1380270840",
"autoUid": "1ea548e1-8970-4833-bc27-16871b0cba4a",
"reportingTime": "1380271111",
"userIP": "117.200.181.36"
}
因此,对于具有不同报告时间的特定gpcId,autoUid可以重复多次。这意味着我们可以(逻辑上)获得最高用户列表(基于autoUid)。这正是我想要的并存储在不同的集合中。因此,理想情况下,生成的集合应该看起来像
{
"gpcId": "CGP_52400c5e301d5",
"autoUid": "1ea548e1-8970-4833-bc27-16871b0cba4a"
"total_count": 10
}
{
"gpcId": "CGP_52400c5e301d5",
"autoUid": "06a02b72-8470-4492-af5f-96ea0d1e8235"
"total_count": 9
}
.
.
.
所以,我想得到一些关于如何实现这一目标的指示。我已经提到了我的Mongo版本。我可以在后端使用PHP或Python来做这件事。
如果我第一次不太清楚,我很抱歉。
请告诉我是否仍然不清楚。
另外,我一直在尝试使用map-reduce,但我认为代码在这里没有意义,因为我无法达到任何甚至接近我想要的结果。
答案 0 :(得分:0)
我认为我发现了它。这个问题对我有帮助。如果您认为可以做得更好,请告诉我。
db.mydb.aggregate({$ match:{gpcId:“CGP_52400c5e301d5”}},{$ group:{_ id:“$ autoUid”,total_count:{$ sum:1}}},{$ sort:{ total_count:-1}})