Прежде всего, трудно найти плавный (прямой) способ реализации ваших потребностей. Конечно, ручной способ, который вы упомянули в своем вопросе, работает. Однако, если у вас слишком много уровней вложенности JSON, или это случайным образом, ваш путь может быть неуместным.
Я бы предложил вам рекурсивно получить l oop результат для подсчета объектов, содержащих "entityType": "node"
. Например, в хранимой процедуре cosmos db:
function sample(prefix) {
var collection = getContext().getCollection();
var isAccepted = collection.queryDocuments(
collection.getSelfLink(),
'SELECT c.childNodes FROM c where c.entityType = "node"',
function (err, feed, options) {
if (err) throw err;
if (!feed || !feed.length) {
var response = getContext().getResponse();
response.setBody('no docs found');
}
else {
var response = getContext().getResponse();
var count = {count:1};
loopChildNodes(feed,count);
response.setBody(count);
}
});
if (!isAccepted) throw new Error('The query was not accepted by the server.');
function loopChildNodes(array,count){
for (var i=0;i<array.length;i++){
console.log(count)
if(array[i].entityType == "node"){
count.count++;
}
if(array[i].childNodes!=null)
loopChildNodes(array[i].childNodes,count)
}
}
}
Мои данные испытаний:
Выход: