Ответ в том, что вы не можете перебрать коллекцию, не относящуюся к списку.Если бы элемент коллекции был структурирован следующим образом:
{"id":"123456",
"activities": [
{ "label": "activityA",
"loginType": "siteA",
"lastLogin": "2018-02-06T19:42:22.205Z"
},
{
"label": "activtyB",
"loginType": "siteB",
"lastLogin": "2018-03-07T11:39:50.346Z"
},
etc...
Было бы легко скомпоновать UDF для повторения с чем-то вроде этого
UDF: filterActivityList
function(activityList, targetDateTimeStart, targetDateTimeEnd) {
var s, _i, _len;
for (_i = 0, _len = activityList.length; _i < _len; _i++) {
s = activityList[_i];
if ((s.lastLogin >= targetDateTimeStart) && (s.lastLogin < targetDateTimeEnd))
{
return true;
}
}
return false;
}
Затем запросить:
выбрать * из c ГДЕ udf.filterActivityList (c.activities, '2018-01-01T00: 00: 00', '2018-02-01T00: 00:00 ');
Если бы я оставил структуру как иерархию JSON вместо ее преобразования в список JSON, мне пришлось бы написать еще один udf-файл, чтобы принять узел верхнего уровня иерархии в качестве входного параметраи пусть он преобразует примечания под ним в список, а затем применяет UDF udf.filterActivityList к результату.Исходя из моего опыта, этот подход требует значительных ресурсов и занимает много времени для обработки Cosmo.