Search code examples
arraysstringmongodbnosql-aggregation

Find the longest item in array of strings in MongoDB


A have a collection Products in MongoDB:

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

How can I find the single longest occurrence if an item in the whole collection? (if I had only this object, the longest occurrence would be "DDDDDDDDDDD" with 11 characters).


Solution

  • $unwind to tags level. Use $strLenCP to compute the length. Use $setWindowFields to $rank the length. $match rank: 1 to select the one(s) with longest length.

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

    Mongo Playground