Вернуть результат агрегата как объект, а не массив - PullRequest
0 голосов
/ 04 августа 2020

У меня есть модели в моей коллекции таким образом ..

{
    "_id": {
        "$oid": "5f213786d0cdd10c61969fc7"
    },
    "stationStatus": "Online",
    "metadata": {
        "SerialNumber": "BP001",
        "imsi": "082943327103528941"
    },
    "boxIdentity": "BP001",
    "__v": 0
}

{
    "_id": {
        "$oid": "5f213786d0cdd10c61969fc7"
    },
    "stationStatus": "Offline",
    "metadata": {
        "SerialNumber": "BP002",
        "imsi": "082943327103528941"
    },
    "boxIdentity": "BP002",
    "__v": 0
}

Это агрегирование данных, которое я выполняю.

       var aggregation = [
        {
          $project: { __v: false },
        },
        {
          $group: {
            _id: { $toLower: "$stationStatus" },
            stations: {
              $push: "$$ROOT",
            },
          },
        },
        {
          $group: {
            _id: null,
            stations: {
              $push: {
                k: "$_id",
                v: "$stations",
              },
            },
          },
        },
        {
          $replaceRoot: {
            newRoot: { $arrayToObject: "$stations" },
          },
        },
      ];
      Model.aggregate(aggregation)
        .then(function (res) {
          console.log(res);
          resolve(res);
        })
        .catch(function (err) {
          reject(err);
        });

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

 [
        {
            "online": [
                {
                    "_id": "5f213786d0cdd10c61969fc7",
                    "stationStatus": "Online",
                    "connectors": [
                        {
                            "_id": "5f213786d0cdd10c61969fc8",
                           ...
                        },
                        {
                            "_id": "5f213791d0cdd10c61969fcf",
                            ...
                        },
                        {
                            "_id": "5f213791d0cdd10c61969fd1",
                            ...
                        }
                    ],
                    "metadata": {
                        "SerialNumber": "BP001",
                        "imsi": "082943327103528941"
                    },
                    "boxIdentity": "BP001"
                },
                {
                    "_id": "5f2809d7b03827069d3b5627",
                    "stationStatus": "Online",
                    "connectors": [
                        {
                            "_id": "5f213786d0ccc310c61969fc8",
                           ...
                        },
                        {
                            "_id": "5f213791d0cd340c61969fcf",
                            ...
                        },
                        {
                            "_id": "5f213791d0cdd10c61369fd1",
                            ...
                        }
                    ],
                    "metadata": {
                        "SerialNumber": "BP002",
                        "imsi": "0963433223503528941"
                    },
                    "boxIdentity": "BP002"
                }
            ]
        }
    ]

1 Ответ

0 голосов
/ 04 августа 2020

Aggregate всегда будет возвращать массив.

Вы можете деструктурировать значение, если используете es6.

Model.aggregate(aggregation)
  .then(function ([theObjectYouWant]) {
    console.log(theObjectYouWant);
    ....
  

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...