Выборочные данные в базе данных выглядит следующим образом:MongoDB размотать множественные пустые массивы
{
'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 и Hash из приведенного выше списка журналов. Мой текущий запрос выглядит н так:
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 возвращает пустой для всего запроса. Я понял, что это поведение по умолчанию для $ relind from несколько похожих сообщений. Но каков стандартный способ использования $ unwind then, если, скажем, у нас нет результатов для «Hash», мы все равно можем сохранить результаты для «IP» и «URL».
Заранее благодарим за любой ответ.
Это работает! Большое спасибо. –