مشاركة عبر


$indexOfArray

$indexOfArray يتم استخدام عامل التشغيل للبحث عن عنصر في صفيف وإرجاع فهرس التكرار الأول للعنصر. إذا لم يتم العثور على العنصر، فإنه يرجع -1. عامل التشغيل هذا مفيد للاستعلامات حيث تحتاج إلى تحديد موضع عنصر داخل صفيف. على سبيل المثال، البحث عن فهرس قيمة أو عنصر معين في قائمة.

إعراب

{
    $indexOfArray: [ < array > , < searchElement > , < start > , < end > ]
}

Parameters

المعلمة‬ Description
<array> الصفيف الذي تريد البحث عن العنصر فيه.
<searchElement> العنصر الذي تبحث عنه في الصفيف.
<start> (اختياري) الفهرس الذي سيتم بدء البحث منه. إذا تم حذفه، يبدأ البحث من بداية الصفيف.
<end> (اختياري) الفهرس الذي سيتم إنهاء البحث عنده. إذا تم حذفه، فسيذهب البحث حتى نهاية الصفيف.

أمثلة

ضع في اعتبارك نموذج المستند هذا من مجموعة المتاجر.

{
    "_id": "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5",
    "name": "Lakeshore Retail | DJ Equipment Stop - Port Cecile",
    "location": {
        "lat": 60.1441,
        "lon": -141.5012
    },
    "staff": {
        "totalStaff": {
            "fullTime": 2,
            "partTime": 0
        }
    },
    "sales": {
        "salesByCategory": [
            {
                "categoryName": "DJ Headphones",
                "totalSales": 35921
            }
        ],
        "fullSales": 3700
    },
    "promotionEvents": [
        {
            "eventName": "Bargain Blitz Days",
            "promotionalDates": {
                "startDate": {
                    "Year": 2024,
                    "Month": 3,
                    "Day": 11
                },
                "endDate": {
                    "Year": 2024,
                    "Month": 2,
                    "Day": 18
                }
            },
            "discounts": [
                {
                    "categoryName": "DJ Turntables",
                    "discountPercentage": 18
                },
                {
                    "categoryName": "DJ Mixers",
                    "discountPercentage": 15
                }
            ]
        }
    ],
    "tag": [
        "#ShopLocal",
        "#SeasonalSale",
        "#FreeShipping",
        "#MembershipDeals"
    ]
}

مثال 1: العثور على فهرس التكرار الأول

يعثر هذا الاستعلام على موضع (فهرس) اسم فئة معينة ("سماعات رأس DJ") داخل salesByCategory الصفيف عبر المجموعة.

db.stores.aggregate([
  {
    $project: {
      index: {
        $indexOfArray: [
          "$sales.salesByCategory.categoryName",
          "DJ Headphones"
        ]
      }
    }
  },
  // Limit the result to the first 3 documents
  { $limit: 3 } 
])

يقوم هذا الاستعلام بإرجاع النتائج التالية:

[
    {
        "_id": "649626c9-eda1-46c0-a27f-dcee19d97f41",
        "index": -1
    },
    {
        "_id": "8345de34-73ec-4a99-9cb6-a81f7b145c34",
        "index": -1
    },
    {
        "_id": "57cc4095-77d9-4345-af20-f8ead9ef0197",
        "index": -1
    }
]

مثال 2: البحث عن الفهرس في نطاق

يجد هذا الاستعلام موضع حدث الترويج "تفاوض أيام الهجمات" داخل الصفيف ضمن promotionEvents نطاق محدد من الفهارس (3 إلى 5) ويصفي النتائج جنبا إلى جنب مع إرجاع المستندات الثلاثة الأولى المتطابقة

db.stores.aggregate([
  // Step 1: Project the index of the "Bargain Blitz Days" event name within the specified range
  {
    $project: {
      index: {
        $indexOfArray: [
          "$promotionEvents.eventName",
          "Bargain Blitz Days",
          3,
          5
        ]
      }
    }
  },
  // Step 2: Match documents where index > 0
  {
    $match: {
      index: { $gt: 0 }
    }
  },
 // Limit the result to the first 3 documents
  { $limit: 3 }                          
])

يقوم هذا الاستعلام بإرجاع النتائج التالية:

 [
    {
        "_id": "ced8caf0-051a-48ce-88d3-2935815261c3",
        "index": 3
    },
    {
        "_id": "509be7ce-539a-41b5-8fde-b85fb3ef3faa",
        "index": 3
    },
    {
        "_id": "d06e8136-9a7f-4b08-92c8-dc8eac73bad3",
        "index": 3
    }
]