как посчитать размер, если значение аргумента не является массивом

#mongodb #mongodb-query #aggregation-framework

Вопрос:

Я хочу отсортировать данные, длина массива result.template которых больше, чем у других

например, идентификатор объекта 5808d700536d1a3d69f4cf57 содержит четыре элемента, которые означают, что это будет первый результат. но когда объект результата не существует, тогда он говорит, что аргумент $size должен быть массивом, но был типа: отсутствует. Как это исправить, пожалуйста, укажите

  db={
  products: [
    {
      "_id": ObjectId("5808d700536d1a3d69f4cf51"),
      result: {
        "template": [
          "Mcd",
          "ded",
          "GCD"
        ]
      },
      dataB: true
    },
    {
      "_id": ObjectId("5808d700536d1a3d69f4cf53"),
      result: {
        "template": [
          "CCD",
          "GHG"
        ]
      }
    },
    {
      "_id": ObjectId("5808d700536d1a3d69f4cf56"),
      
    },
    {
      "_id": ObjectId("5808d700536d1a3d69f4cf57"),
      result: {
        "template": [
          "VVD",
          "SSD",
          "Fsd",
          "Xcd",
          
        ]
      }
    },
    {
      "_id": ObjectId("5808d700536d1a3d69f4cf43"),
      
    },
    
  ]
}
 

Проверьте это https://mongoplayground.net/p/Wg144t8fvso

Ответ №1:

Вы можете попробовать

 "count": {
        "$size": {
          "$cond": [
            {
              "$isArray": "$result.template"
            },
            "$result.template",
            []
          ]
        }
      }
 

https://mongoplayground.net/p/K0shGUYRMsM