在MongoDB中存储一些日志数据。现在我需要获取一个列表,列出实际存储在集合中的日志类型。
我有这样的文件:(假装每个和更多的组和子组可能有数千个)
{
"Group": "Import",
"SubGroup": "Update server"
},{
"Group": "Import",
"SubGroup": "Delete server"
}
我想最终得到类似的东西:
{
"Group": "Import",
"SubGroups": ["Delete server", "Update server"]
}
但是因为每个SubGroup可能会有更多,并且我想要任何重复... javascript有类似HashKey集的东西......这里不是js专家。
我将把它用于gui,这样用户就可以选择他想看的日志类型。
作为一个附带问题。 由于Mapreduce和输出类型可以内联,替换和减少。 MongoDB中是否有任何简单的方法,所以我可以告诉它每隔x分钟只更新MapReduce,因为它实际上非常静态,或者我必须在我自己的应用层中实现缓存?
答案 0 :(得分:1)
... javascript有类似HashKey集的东西
所以javascript 中的所有内容都是哈希表。像这样存储您的结果,您将获得具有相同语义的哈希:
{
"Group": "Import",
"SubGroups": { "Delete server": 1, "Update server": 1 }
}
由于Mapreduce和输出类型可以内联,替换和减少。
我个人的建议是避免使用inline
。如果你要全力投入Map / Reduce,你也可以保存结果。
为您留下replace
和reduce
以及merge
(列出here选项)。
它实际上是非常静态的,还是我必须在我自己的应用层中实现缓存?
Map / Reduce的输出只是一个集合。该集合具有特定格式(_id
,value
),但它是一个可查询的集合,与其他集合一样。
如果要每10分钟覆盖摘要数据,则可以这样做。但是,这意味着您必须在所有数据上运行Map / Reduce。这可能代表了日志系统中的大量工作。
相反,您可能希望仅对数据的新部分运行M / R,然后针对现有摘要数据“重新减少”。这将是最快的。