Megosztás a következőn keresztül:


$maxN (tömbkifejezés)

Vonatkozik a következőkre: MongoDB virtuális mag

Az $maxN operátor egy tömb n legnagyobb értékét adja vissza. Ez akkor hasznos, ha numerikus értékek alapján szeretné megtalálni a legjobban teljesítő elemeket, például a legmagasabb értékesítési számokat vagy a legnagyobb kedvezmény százalékos arányát.

Szemantika

Az operátor szintaxisa a $objectToArray következő:

{
  $maxN: {
    input: <array>,
    n: <number>
  }
}

Paraméterek

Leírás
input Az a tömb, amelyből az n legnagyobb értéket adja vissza. A tömbnek numerikus értékeket kell tartalmaznia.
n A legnagyobb visszaadandó értékek száma. Pozitív egész számnak kell lennie.

példa

Tekintsük át az adathalmazból származó stores JSON-minta használatát.

{
  "_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74",
  "name": "Proseware, Inc. | Home Entertainment Hub - East Linwoodbury",
  "sales": {
    "totalSales": 151864,
    "salesByCategory": [
      {
        "categoryName": "Sound Bars",
        "totalSales": 2120
      },
      {
        "categoryName": "Home Theater Projectors",
        "totalSales": 45004
      },
      {
        "categoryName": "Game Controllers",
        "totalSales": 43522
      },
      {
        "categoryName": "Remote Controls",
        "totalSales": 28946
      },
      {
        "categoryName": "VR Games",
        "totalSales": 32272
      }
    ]
  },
  "promotionEvents": [
    {
      "eventName": "Major Bargain Bash",
      "discounts": [
        {
          "categoryName": "Sound Bars",
          "discountPercentage": 9
        },
        {
          "categoryName": "VR Games",
          "discountPercentage": 7
        },
        {
          "categoryName": "Xbox Games",
          "discountPercentage": 25
        },
        {
          "categoryName": "Projector Accessories",
          "discountPercentage": 18
        },
        {
          "categoryName": "Mobile Games",
          "discountPercentage": 8
        },
        {
          "categoryName": "Projector Cases",
          "discountPercentage": 22
        }
      ]
    }
  ]
}

1. példa: Az első három értékesítési érték lekérése

Tegyük fel, hogy az összes értékesítési kategória első három értékesítési értékét szeretné megtalálni.

db.stores.aggregate([
  { $match: {"_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74"} },
  {
    $project: {
      name: 1,
      topThreeSales: {
        $maxN: {
          input: "$sales.salesByCategory.totalSales",
          n: 3
        }
      }
    }
  }
])

Ez a következő kimenetet eredményezi:

[
  {
    _id: '40d6f4d7-50cd-4929-9a07-0a7a133c2e74',
    name: 'Proseware, Inc. | Home Entertainment Hub - East Linwoodbury',
    topThreeSales: [ 45004, 43522, 32272 ]
  }
]

2. példa: A legmagasabb kedvezmény százalékos arányának lekérése

Egy promóciós eseményből is $maxN megtalálhatja a legmagasabb kedvezmény százalékos arányát.

db.stores.aggregate([
  { $match: {"_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74"} },
  { $unwind: "$promotionEvents" },
  { $match: {"promotionEvents.eventName": "Major Bargain Bash"} },
  {
    $project: {
      name: 1,
      eventName: "$promotionEvents.eventName",
      topTwoDiscounts: {
        $maxN: {
          input: "$promotionEvents.discounts.discountPercentage",
          n: 2
        }
      }
    }
  }
])

Ez a következő kimenetet eredményezi:

[
  {
    _id: '40d6f4d7-50cd-4929-9a07-0a7a133c2e74',
    name: 'Proseware, Inc. | Home Entertainment Hub - East Linwoodbury',
    eventName: 'Major Bargain Bash',
    topTwoDiscounts: [ 25, 22 ]
  }
]

3. példa: A több üzletre kiterjedő legnépszerűbb értékesítések összehasonlítása

A különböző üzletek legnépszerűbb értékesítési értékeinek összehasonlítására használható $maxN .

db.stores.aggregate([
  {
    $project: {
      name: 1,
      topTwoSales: {
        $maxN: {
          input: "$sales.salesByCategory.totalSales",
          n: 2
        }
      }
    }
  },
  { $limit: 3 }
])

Ez a lekérdezés a gyűjtemény első három üzletének első két értékesítési értékét adja vissza, így könnyen összehasonlíthatja a különböző helyek teljesítményét.

[
  {
    _id: 'af9015d8-3f6b-455f-8967-a83cc22ff018',
    name: 'VanArsdel, Ltd. | Party Goods Nook - Kunzeshire',
    topTwoSales: [ 3526 ]
  },
  {
    _id: 'ed319c06-731d-45fc-8a47-b05af8637cdf',
    name: 'Relecloud | Computer Outlet - Langoshfort',
    topTwoSales: [ 46356, 41111 ]
  },
  {
    _id: '62438f5f-0c56-4a21-8c6c-6bfa479494ad',
    name: 'First Up Consultants | Plumbing Supply Shoppe - New Ubaldofort',
    topTwoSales: [ 36202, 32306 ]
  }
]
  • A MongoDB-ről az Azure Cosmos DB for MongoDB-re (vCore) való migrálás lehetőségeinek áttekintése
  • További információ a MongoDB-vel való funkciókompatibilitásról