首页 > 解决方案 > Marklogic Javascript for 循环

问题描述

我有多种 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 以获取结果开发人员的名字是“Melvin Mckee”和“Brenton York”

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
  }

我在 Qconsole 上得到了结果 NULL。

标签: marklogic

解决方案


部分问题是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

推荐阅读