Найдите самый длинный элемент в массиве строк в MongoDB

У меня есть коллекция продуктов в MongoDB:

{
  "name": "My Product 01",
  "description": "This is an excelent product", 
  "tags": [
    "AA",
    "BBBB",
    "C",
    "DDDDDDDDDDD"
  ]  
}

Как мне найти самое длинное вхождение элемента во всей коллекции? (если бы у меня был только этот объект, самым длинным вхождением было бы «DDDDDDDDDD» из 11 символов).

вы имеете в виду самый длинный тег отдельных объектов или всю коллекцию?

cmgchess 23.07.2024 21:23

Что вы пробовали? Вы уже проверили $strLenCP?

ray 23.07.2024 21:26

Я имею в виду самое длинное появление тега во всей коллекции.

Rafael A P Nascimento 23.07.2024 21:26
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
2
3
59
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

$unwind до tags уровня. Используйте $strLenCP, чтобы вычислить длину. Используйте $setWindowFields, чтобы $rank указать длину. $matchrank: 1, чтобы выбрать самую длинную длину.

db.Products.aggregate([
  {
    "$unwind": "$tags"
  },
  {
    "$set": {
      "length": {
        "$strLenCP": "$tags"
      }
    }
  },
  {
    "$setWindowFields": {
      "partitionBy": null,
      "sortBy": {
        "length": -1
      },
      "output": {
        "rank": {
          $rank: {}
        }
      }
    }
  },
  {
    "$match": {
      rank: 1
    }
  }
])

Игровая площадка Монго

db.Products.aggregate([
  // Unwind the tags array
  {
    $unwind: "$tags"
  },
  // Project each tag with its length
  {
    $project: {
      tag: "$tags",
      length: {
        $strLenCP: "$tags"
      }
    }
  },
  // Sort by length in descending order
  {
    $sort: {
      length: -1
    }
  },
  // Limit to the longest tag
  {
    $limit: 1
  },
  // Project only the tag field
  {
    $project: {
      _id: 0,
      tag: 1
    }
  }
])

генерирует:

[
  {
    "tag": "DDDDDDDDDDD"
  }
]

Другие вопросы по теме