$abs

$abs işleci bir sayının mutlak değerini döndürür. Bir sayıdaki negatif işareti kaldırır ve pozitif hale getirir.

Sözdizimi

{
  $abs: <expression>
}

Parametreler

Parametre Description
<expression> Bir sayıya çözümleyen herhangi bir ifade. İfade null ise veya eksik bir alana başvuruyorsa, $abs null döndürür.

Örnekler

Stores koleksiyonundaki bu örnek belgeyi göz önünde bulundurun.

{
    "_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
                }
            ]
        }
    ]
}

Örnek 1 - Toplam satışların mutlak değerini kullanma

Her kategorinin satış hacmindeki mutlak farkı ve bir mağazanın tüm kategorilerdeki ortalama satışlarını hesaplamak için, önce belirli bir mağazayı filtrelemek için bir sorgu çalıştırın. Ardından, her kategori ile tüm kategoriler arasındaki ortalama arasındaki satış farkını hesaplayın. Son olarak, $abs işlecini kullanarak mutlak farkı yansıtın.

db.stores.aggregate([{
    $match: {
        _id: "40d6f4d7-50cd-4929-9a07-0a7a133c2e74"
    }
}, {
    $project: {
        name: 1,
        salesByCategory: {
            $map: {
                input: "$sales.salesByCategory",
                as: "category",
                in: {
                    categoryName: "$$category.categoryName",
                    totalSales: "$$category.totalSales",
                    differenceFromAverage: {
                        $abs: {
                            $subtract: ["$$category.totalSales", {
                                $avg: "$sales.salesByCategory.totalSales"
                            }]
                        }
                    }
                }
            }
        }
    }
}])

Bu sorgu aşağıdaki sonucu döndürür:

[
  {
    "_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74",
    "name": "Proseware, Inc. | Home Entertainment Hub - East Linwoodbury",
    "salesByCategory": [
      {
        "categoryName": "Sound Bars",
        "totalSales": 2120,
        "differenceFromAverage": 28252.8
      },
      {
        "categoryName": "Home Theater Projectors",
        "totalSales": 45004,
        "differenceFromAverage": 14631.2
      },
      {
        "categoryName": "Game Controllers",
        "totalSales": 43522,
        "differenceFromAverage": 13149.2
      },
      {
        "categoryName": "Remote Controls",
        "totalSales": 28946,
        "differenceFromAverage": 1426.8
      },
      {
        "categoryName": "VR Games",
        "totalSales": 32272,
        "differenceFromAverage": 1899.2
      }
    ]
  }
]