$denseRank

El $denseRank operador ordena documentos en uno o varios campos dentro de una partición y asigna una clasificación para cada documento en relación con otros documentos del conjunto de resultados.

Syntax

{
  $denseRank: {}
}

Examples

Considere este documento de ejemplo de la colección de tiendas.

{
    "_id": "0fcc0bf0-ed18-4ab8-b558-9848e18058f4",
    "name": "First Up Consultants | Beverage Shop - Satterfieldmouth",
    "location": {
        "lat": -89.2384,
        "lon": -46.4012
    },
    "staff": {
        "totalStaff": {
            "fullTime": 8,
            "partTime": 20
        }
    },
    "sales": {
        "totalSales": 75670,
        "salesByCategory": [
            {
                "categoryName": "Wine Accessories",
                "totalSales": 34440
            },
            {
                "categoryName": "Bitters",
                "totalSales": 39496
            },
            {
                "categoryName": "Rum",
                "totalSales": 1734
            }
        ]
    },
    "promotionEvents": [
        {
            "eventName": "Unbeatable Bargain Bash",
            "promotionalDates": {
                "startDate": {
                    "Year": 2024,
                    "Month": 6,
                    "Day": 23
                },
                "endDate": {
                    "Year": 2024,
                    "Month": 7,
                    "Day": 2
                }
            },
            "discounts": [
                {
                    "categoryName": "Whiskey",
                    "discountPercentage": 7
                },
                {
                    "categoryName": "Bitters",
                    "discountPercentage": 15
                },
                {
                    "categoryName": "Brandy",
                    "discountPercentage": 8
                },
                {
                    "categoryName": "Sports Drinks",
                    "discountPercentage": 22
                },
                {
                    "categoryName": "Vodka",
                    "discountPercentage": 19
                }
            ]
        },
        {
            "eventName": "Steal of a Deal Days",
            "promotionalDates": {
                "startDate": {
                    "Year": 2024,
                    "Month": 9,
                    "Day": 21
                },
                "endDate": {
                    "Year": 2024,
                    "Month": 9,
                    "Day": 29
                }
            },
            "discounts": [
                {
                    "categoryName": "Organic Wine",
                    "discountPercentage": 19
                },
                {
                    "categoryName": "White Wine",
                    "discountPercentage": 20
                },
                {
                    "categoryName": "Sparkling Wine",
                    "discountPercentage": 19
                },
                {
                    "categoryName": "Whiskey",
                    "discountPercentage": 17
                },
                {
                    "categoryName": "Vodka",
                    "discountPercentage": 23
                }
            ]
        }
    ]
}

Ejemplo 1: Recuperación de un rango de documento para cada almacén

Para calcular un rango de documento para cada tienda de la empresa First Up Consultants, ejecute primero una consulta para filtrar por la empresa y, a continuación, ordene los documentos resultantes en orden descendente de ventas y asigne una clasificación de documento a cada documento del conjunto de resultados ordenados.

db.stores.aggregate([{
    "$match": {
        "company": {
            "$in": ["First Up Consultants"]
        }
    }
}, {
    "$setWindowFields": {
        "partitionBy": "$company",
        "sortBy": {
            "sales.totalSales": -1
        },
        "output": {
            "denseRank": {
                "$denseRank": {}
            }
        }
    }
}, {
    "$project": {
        "company": 1,
        "sales.totalSales": 1,
        "denseRank": 1
    }
}])

Los cinco primeros resultados devueltos por esta consulta son:

[
    {
        "_id": "a0386810-b6f8-4b05-9d60-e536fb2b0026",
        "sales": {
            "revenue": 327583
        },
        "company": "First Up Consultants",
        "denseRank": 1
    },
    {
        "_id": "ad8af64a-d5bb-4162-9bb6-e5104126566d",
        "sales": {
            "revenue": 288582
        },
        "company": "First Up Consultants",
        "denseRank": 2
    },
    {
        "_id": "39acb3aa-f350-41cb-9279-9e34c004415a",
        "sales": {
            "revenue": 279183
        },
        "company": "First Up Consultants",
        "denseRank": 3
    },
    {
        "_id": "cd3d3782-17d1-451e-8b0f-4f10a68a8db7",
        "sales": {
            "revenue": 271604
        },
        "company": "First Up Consultants",
        "denseRank": 4
    },
    {
        "_id": "63ac4722-fc87-4526-a5e0-b5767d2807f7",
        "sales": {
            "revenue": 260409
        },
        "company": "First Up Consultants",
        "denseRank": 5
    }
]