Mongo db Сгруппировать, считать с условием - PullRequest
0 голосов
/ 21 января 2019

Используя Mongodb, я хочу получить количество значений датчиков выше 100 и значений датчиков ниже 100 для каждого конкретного региона (группы по регионам).

У меня есть свойство sensorValue, и оно имеет 4 под-свойства, а именно.1) sensorValue (значения будут 100, 200, 122, 80 и т. Д.) - я хочу знать количество выше 100 и ниже 100 на регион.2) Широта 3) Долгота 4) Регион (название региона) - я хочу подсчет относительно этого региона.

С помощью stackoverflow я написал следующий запрос.

getProximityIntervalRate = (req, res) => {
    console.log("entered1")
    this.model = ProximityLocation;
    const startDate = req.headers.startdate, endDate = req.headers.enddate;
    console.log(req.headers, startDate, endDate);
    // TODO: server validatoin

    this.model.aggregate([
        { $match: { 'observationTimestamp': { $gte: new Date(startDate), $lte: new Date(endDate) } } },
        {
            $project: {
                regoin: 1,
                lessthan: {
                    $cond: [{ $lt: ["$sensorValue.sensorValue", 5] }, 1, 0]
                },
                morethan: {
                    $cond: [{ $gt: ["$sensorValue.sensorValue", 5] }, 1, 0]
                }
            }
        },
        {
            $group: { _id: { regoin: "$sensorValue.regoin" }, 
            countSmaller: { $sum: "$lessThan" },
            countBigger: { $sum: "$moreThan" } uh
            }
        },

    ], (err, location) => {
        console.log('location', location);
        if (!location) { return res.sendStatus(404); }

        res.status(200).json(location);

    });

}

Я не уверен, как обратиться к подвойству «sensorValue.regoin» в опции «$ project». Пожалуйста, дайте мне знать, если я что-то упустил.

Sample Document is attached

1 Ответ

0 голосов
/ 21 января 2019

Вы можете попробовать ниже агрегации, чтобы получить результат

db.t66.aggregate([
    {$group: {
        _id : "$sensorValue.region", 
        lessThan : {$sum : {$cond: [{$lt : [{$toInt : "$sensorValue.sensorValue"}, 50]}, 1,0]}},
        greaterThan : {$sum : {$cond: [{$gte : [{$toInt : "$sensorValue.sensorValue"}, 50]}, 1,0]}},
    }}
])

вы можете удалить $toInt, если sensorValue имеет int тип данных

...