【发布时间】:2014-02-04 03:14:17
【问题描述】:
我正在尝试从一个或多个子文档中获取数据,但我不知道将保存子文档的字段的名称。以下是文档外观的一些示例。
- https://github.com/vz-risk/VCDB/blob/master/data/json/0C5DE044-B9B4-408D-9E65-D367EED12AB2.json
- https://github.com/vz-risk/VCDB/blob/master/data/json/064F5887-C2DA-4139-B3AA-D55906F8C30A.json
我想获得这些事件的动作变体,所以对于第一个事件,我想获得 action.malware.variety 和 action.social.variety。在第二个示例中,它将是 action.hacking.variety 和 action.malware.variety。所以问题是我不知道哪个字段将保存子文档。它可能是黑客攻击、恶意软件、社交、错误、误用、物理和环境中的一种。
所以我想 $unwind 该字段并使用键名做一些事情。这是可以通过聚合完成的事情,还是我需要切换到 mapReduce?
【问题讨论】:
-
使用聚合框架很难做到,因为你只能展开对象数组。在示例 json 中,action 属性只是一个对象,而不是对象数组。所以这里不能放松。如果重构架构可以吗?还请告诉我您真正希望如何显示输出。
-
这实际上是一个公平的问题,因为并不是每个人都知道 $ifNull 和 $cond 在聚合投影中的用途
-
@cj0809 您可能想查看已接受的答案,该答案演示了您观察到的问题。
标签: mongodb mapreduce aggregation-framework