У меня есть коллекция продуктов в MongoDB:
{
"name": "My Product 01",
"description": "This is an excelent product",
"tags": [
"AA",
"BBBB",
"C",
"DDDDDDDDDDD"
]
}
Как мне найти самое длинное вхождение элемента во всей коллекции? (если бы у меня был только этот объект, самым длинным вхождением было бы «DDDDDDDDDD» из 11 символов).
🤔 А знаете ли вы, что...
MongoDB может использоваться для создания реактивных приложений с использованием Change Streams...
$unwind
до tags
уровня. Используйте $strLenCP
, чтобы вычислить длину. Используйте $setWindowFields
, чтобы $rank
указать длину. $match
rank: 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"
}
]