Mongo - подсчитать размер различных именованных узлов (не их значения, а количество узлов) - PullRequest
0 голосов
/ 04 ноября 2018

В json ниже я хотел бы узнать количество всех уникальных / отличных записей в нескольких разных узлах.

Я думаю, что должно быть решение без агрегации, но я не могу найти ни агрегацию, ни агрегацию.

Для каждого узла я могу подсчитать его с помощью:

db.collection.distinct('nodaA.title').length

И замените '' соответствующим полем для других узлов. Но я хочу получить значения «NodeB.subNoda1.author» и «NodeB.subNode2.song» и «NodeB.subNode3.picture», все с 1 запросом.

Я хочу получить результат, похожий на
название: 1
автор: 2
песня: 3
картинка: 1

    "nodaA": [
      {
        "title": "light",
        "id"   : 1
      }
    ],
    "NodeB": {
      "subBnode1": [
        {
          "author": "Gazundheit"
        },
        {
          "author": "Max Weasley"
        }
      ],
      "subBnode2": [
        {
          "song" : "what is love"
        },
       {
          "song" : "gangster's paradise"
        },
       {
          "song" : "wind is gone"
        }
      ],
      "subBnode3": [
        {
          "picture" : "inappropriate"
        }
      ]
    }
  }

1 Ответ

0 голосов
/ 07 ноября 2018

Как указал NeilLunn, это можно сделать только с MapReduce, вот что я закончил:

карта:

function () {
   emit("titles", this.title);
   for (var key in this.nodeB) {       
        emit(key, this.nodeB[key]);
       }
         }

уменьшить:

 function (key, values) {
         var reducedValue = array.length;
         return reducedValue;
|

Извините, если это не скомпилировано точно - я изменил это из моих фактических данных, но это суть того, что я сделал, на случай, если это кому-нибудь поможет. Если потребуется больше деталей, добавлю.

...