【发布时间】:2015-10-21 04:12:59
【问题描述】:
数据库中的示例数据如下所示:
{
'data':
[
'Log':
{
'IP':['8.8.8.8','8.8.4.4'],
'URL':['www.google.com']
'Hash' ['d2a12319bf1221ce7681928cc']
},
'Log':
{
'IP':['1.2.3.4'],
'URL':['www.cnn.com']
'Hash' []
},
]
}
我正在尝试从上述日志列表中汇总唯一 IP、URL 和哈希列表。我当前的查询看起来像这样:
db.loglist.aggregate([{'$match':{'data.Log':{'$exists':true}}},
{'$unwind':'$data'},
{'$unwind':'$data.Log.URL'},
{'$unwind':'$data.Log.Hash'},
{'$unwind':'$data.Log.IP'},
{'$group':{'_id':'$ioc',
'FHList':{'$addToSet':'$data.Log.Hash'},
'URLList':{'$addToSet':'$data.Log.URL'},
'IPList':{'$addToSet':'$data.Log.IP'}}
}])
如果对于每个日志,三个数组中的每个数组中至少有一个元素,则效果很好。但是,当有一个空数组出现在任何一个日志中时。 Mongo 对整个查询返回空。我从一些类似的帖子中发现这是 $unwind 的默认行为。但是使用 $unwind 的标准方法是什么,如果说我们没有“哈希”的结果,我们仍然可以保留“IP”和“URL”的结果。
提前感谢您的任何回答。
【问题讨论】:
标签: mongodb mongodb-query aggregation-framework