Dela via


$elemMatch (matrisfråga)

GÄLLER FÖR: MongoDB vCore

Operatorn $elemMatch används för att matcha dokument som innehåller ett matrisfält med minst ett element som matchar alla angivna frågevillkor. Den här operatorn är särskilt användbar när du behöver hitta matrisdokument med angivet element.

Syntax

Den grundläggande syntaxen för operatorn $elemMatch är följande:

db.collection.find({ <field>: { $elemMatch: { <query1>, <query2>, ... } } })

Parametrar

beskrivning
field Fältet i dokumentet som innehåller matrisen som ska frågas.
query De villkor som minst ett element i matrisen måste uppfylla.

Exempel

Nu ska vi förstå användningen med exempel-json från stores datauppsättningen.

[
  {
    "_id": "91de5201-8194-44bf-848f-674e8df8bf5e",
    "name": "Adatum Corporation",
    "promotionEvents": [
      {
        "discounts": [
          { "categoryName": "DJ Cases", "discountPercentage": 6 },
          { "categoryName": "DJ Mixers", "discountPercentage": 14 }
        ]
      },
      {
        "discounts": [
          { "categoryName": "DJ Headphones", "discountPercentage": 19 },
          { "categoryName": "DJ Speakers", "discountPercentage": 13 }
        ]
      },
      {
        "discounts": [
          { "categoryName": "DJ Lighting", "discountPercentage": 12 },
          { "categoryName": "DJ Accessories", "discountPercentage": 6 }
        ]
      }
    ]
  }
]

Exempel 1: Sök i en matris för specifika element i listan över element

Det här exemplet hittar de två första dokumenten i samlingen som har minst en rabatt med kategorinamnet "DJ Lighting" i matrisen storespromotionEvents . Frågan returnerar endast fälten _id och promotionEvents.discounts för dessa dokument.

db.stores.find(  {"promotionEvents.discounts":{$elemMatch:{"categoryName":"DJ Lighting"}}}
                ,{ _id: 1, "promotionEvents.discounts": 1 }).limit(2)

Följande dokument returneras.

{
    "_id": "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5",
    "promotionEvents": [
      {
        "discounts": [
          {
            "categoryName": "DJ Turntables",
            "discountPercentage": 18
          },
          {
            "categoryName": "DJ Mixers",
            "discountPercentage": 15
          }
        ]
      },
      {
        "discounts": [
          {
            "categoryName": "DJ Lighting",
            "discountPercentage": 14
          },
          {
            "categoryName": "DJ Cases",
            "discountPercentage": 20
          }
        ]
      }
    ]
  },
  {
    "_id": "91de5201-8194-44bf-848f-674e8df8bf5e",
    "promotionEvents": [
      {
        "discounts": [
          {
            "categoryName": "DJ Cases",
            "discountPercentage": 6
          },
          {
            "categoryName": "DJ Mixers",
            "discountPercentage": 14
          }
        ]
      },
      {
        "discounts": [
          {
            "categoryName": "DJ Headphones",
            "discountPercentage": 19
          },
          {
            "categoryName": "DJ Speakers",
            "discountPercentage": 13
          }
        ]
      },
      {
        "discounts": [
          {
            "categoryName": "DJ Lighting",
            "discountPercentage": 12
          },
          {
            "categoryName": "DJ Accessories",
            "discountPercentage": 6
          }
        ]
      }
    ]
}