Marklogic Javascript для цикла - PullRequest
       1

Marklogic Javascript для цикла

0 голосов
/ 13 февраля 2019

У меня есть несколько JSON формат.Как я могу зациклить JSON-файлы для отображения имени разработчика.Спасибо

пример:

doc1.json

{
 "script": "collectionlib.sjs"
 "version": "1.0.1"
 "Developers":"Melvin Mckee"
}

doc2.json

{
 "script": "TechReports.sjs"
 "version": "1.1.5"
 "Developers":"Brenton York"
}

Я могу сделать для одного файла JSON.

 'use strict';
  var doc = cts.doc("/doc1.json")
  var node = xdmp.toJSON(doc)
  node.root.Developers

//Return result: "Melvin Mckee"

, но не уверен, как построить For..Loop, чтобы получить результат обратно разработчикамзовут "Мелвин Макки" и "Брентон Йорк"

var items = cts.uris(null,
                    null,
                    cts.collectionQuery("scripts-collection")
           ) 

for (var i = 0; i < items.length;i++){
     var doc = cts.doc(items[i]);
     var node = xdmp.toJSON(doc); 
     node.root.developers
  }

Я получил результат NULL на Qconsole.

1 Ответ

0 голосов
/ 14 февраля 2019

Отчасти проблема заключается в том, что node.root.developers имеет строчную букву «d», а предоставленные вами данные - заглавную букву «D».Это могло быть опечаткой.

MarkLogic возвращает значение последнего выражения, но цикл for не возвращает значение.Что вы хотите сделать, это объявить переменную массива перед циклом, добавить к нему во время цикла, а затем вернуть эту переменную.

Попробуйте это:

let uris = 
  cts.uris(
    null,
    null,
    cts.collectionQuery("scripts-collection")
  ) 

let devs = [];

for (let uri of uris) {
  let doc = cts.doc(uri);
  let node = xdmp.toJSON(doc);
  devs.push(node.root.Developers);
}

devs
...