MongoDb: получить все документы выше среднего значения столбца - PullRequest
1 голос
/ 01 декабря 2019

Я создал коллекцию, используя этот фрагмент кода.

db.createCollection("item", {
    validator: {
        $jsonSchema: {
            bsonType: "object",
            required: ["_id", "item_name", "unit_price"],
            properties: {
                _id: {
                    bsonType: "string",
                    description: "must be a string and is required",
                    minLength: 3,
                    maxLength: 5,
                    pattern: "I[0-9]*$"
                },
                item_name: {
                    bsonType: "string",
                    description: "must be a string and is required"
                },
                unit_price: {
                    bsonType: "double"
                }
            }
        }
    },
    validationLevel: "moderate"
})

, и я вставил записи в коллекцию Item. Теперь я хочу перечислить предметы, у которых "unit_price" меньше, чем средняя цена всех предметов. Я попытался использовать

db.item.aggregate([{
    $group: {
        _id: null,
        averageUnitPrice: {
            $avg: "$unit_price"
        }
    }
}])

. Я пытался использовать вышеуказанный фрагмент кода, но я не могу понять, как взять это среднее значение и использовать его для получения документов, которые выше, чем AverageUnitPrice. Любая помощь высоко ценится!! Спасибо огромное !!!

1 Ответ

1 голос
/ 02 декабря 2019

Так что я наконец понял это. Этот запрос даст мне среднее значение и список элементов, которые меньше среднего значения.

db.item.aggregate([{
        $group: {
                _id: null,
                avg_price: {
                    $avg: "$unit_price"
                },
                unit_price: { 
                   "$addToSet": "$unit_price"
                }
        },
    },{
        $project: {
            avg_price: "$avg_price",
            unit_price: {
                $filter: {
                    input: "$unit_price",
                    as: "unit_prices",
                    cond: {
                        $lt: ["$$unit_prices", "$avg_price"]
                    }
                }   
            }
        }
    }
])
...