Как перебрать массив в последовательности, используя forEach - PullRequest
0 голосов
/ 12 октября 2018

Я использую функцию xdmp.eval для поиска и возврата документа в моей окончательной базе данных для использования в процессе согласования.

let finalDoc = xdmp.eval(
"fn.head(cts.search(cts.jsonPropertyValueQuery('Id',id, 
['exact']),['unfiltered','score-zero']))",
     {'id':id},
     {"database" : xdmp.database("data-hub-FINAL")});

Документ возвращается в виде последовательности со следующей структурой:

{"SourceSystemName":"",
  "BatchDtTm":"06/20/2018 15:05:15",
  "SubjectArea":"Customer",
  "DocumentType":"Registration",
   "Id":"100", 
     "Contact":[
       {"CustomerId":"1",
        "FirstName":"",
        "LastName":"",
        "EmailId":""
       },
       {"CustomerId":"2",
        "FirstName":"",
        "LastName":"",
        "EmailId":""
       }            
     ]
}

Мне нужно перебрать каждого клиента в массиве Contact , используя finalDoc.Contact.forEach () .Однако, когда я использую fn.head (finalDoc.toArray ()) или fn.head (finalDoc.toObject ()) для изменения последовательности finalDoc на массив, моя функция forEach завершается с ошибкой «Cannot read property»forEach 'of undefined ".Когда я просто пытаюсь вывести массив контактов, выполнив finalDoc.Contact (или finalDoc [0] .Contact), я получаю вывод «Null».

Как извлечь массив Contact из последовательностии перебрать его с помощью forEach?Спасибо!

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

У вас правильные фигуры, просто неправильный порядок.fn.head не принимает массив, поэтому он не действует в fn.head(finalDoc.toArray()): у вас все еще будет массив.Вы можете преобразовать последовательность в массив, а затем использовать индекс массива:

finalDoc.toArray()[0].Contact.forEach(...)

или вы можете использовать fn.head в первоначально eval'd Sequence

fn.head(finalDoc).Contact.forEach(...)
0 голосов
/ 12 октября 2018

var myobj = {"SourceSystemName":"",
  "BatchDtTm":"06/20/2018 15:05:15",
  "SubjectArea":"Customer",
  "DocumentType":"Registration",
   "Id":"100", 
     "Contact":[
       {"CustomerId":"1",
        "FirstName":"",
        "LastName":"",
        "EmailId":""
       },
       {"CustomerId":"2",
        "FirstName":"",
        "LastName":"",
        "EmailId":""
       }            
     ]
}

myobj["Contact"].forEach(function(item){
console.log(item);
})

Я думаю, вам не нужно вызывать toArray (), если это уже объект.

...