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

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

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

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

🤔 А знаете ли вы, что...
MongoDB может использоваться для создания реактивных приложений с использованием Change Streams...


2
59
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"
  }
]