Mongo DB - Чтобы получить последние данные для каждого уникального адреса электронной почты - сгруппированы по регионам - PullRequest
0 голосов
/ 31 января 2019
db.TYPE_Join_STEP_COUNTER_GPS.aggregate([
        { $match: { 'Time.ObservationTimestamp': { $gte: ISODate("2019-01-01T00:00:00+00:00"),  $lt: ISODate("2019-02-02T00:00:00+00:00") } } },
        {
            $group: {
                _id: { users: "$userAccount.userEmail" },

                sensorValue: { $addToSet: "$sensorValue.sensorValue" }
            }
        },
        {
            $unwind: "$sensorValue"
        },
        {
            $group: { _id: "$_id", lastdata: {$last: "$sensorValue"} }
        }
    ])

Я получил следующие выходные данные для этого запроса.

/* 1 */
{
"_id" : {
    "users" : "test1@gmail.com"
},
"lastdata" : "245"
},

/* 2 */
{
"_id" : {
    "users" : "test2@gmail.com"
},
"lastdata" : "135"
}

Что мне нужно - мне нужны последние данные значения датчика для уникальных идентификаторов электронной почты в каждом регионе.Я попытался добавить еще одну группу по условию относительно региона, но это не сработало.Пожалуйста, дайте мне знать, если я что-то упустил.Заранее спасибо.

Сбор образцов :

{
"_id" : ObjectId("5c52f5370ad3076c2398ba83"),
"userAccount" : {
    "userId" : "115867679428105538091",
    "userEmail" : "test1@gmail.com"
},
"deviceId" : "9312dfc5b63063c7",
"sensorType" : "TYPE_Join_STEP_COUNTER_GPS",
"sensorValue" : {
    "sensorValue" : "257",
    "regoin" : "Region1"
},
"Time" : {
    "ObservationTimestamp" : ISODate("2019-01-30T00:00:00.000+00:00")
}
}

Ожидаемый результат:

/* 1 */
{
"_id" : {
    "regoin" : "Region1"
},
users: "Test1@gmail.com" , "lastdata" : "135"
users: "Test2@gmail.com" , "lastdata" : "105"
},

/* 2 */
{
"_id" : {
    "regoin" : "Region2"
},
users: "Test1@gmail.com" , "lastdata" : "105"
users: "Test2@gmail.com" , "lastdata" : "100"
},

1 Ответ

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

Вы можете использовать $last аккумулятор, чтобы получить последнее значение датчика

db.TYPE_Join_STEP_COUNTER_GPS.aggregate([
  { "$match": {
    "Time.ObservationTimestamp": {
      "$gte": ISODate("2019-01-01T00:00:00+00:00"),
      "$lt": ISODate("2019-02-02T00:00:00+00:00")
    }
  }},
  { "$group": {
    "_id": { "userEmail": "$userAccount.userEmail", "regoin": "$sensorValue.regoin" },
    "sensorValue": { "$last": "$sensorValue.sensorValue" }
  }},
  { "$group": {
    "_id": "$_id.regoin",
    "data": {
      "$push": {
        "user": "$_id.userEmail",
        "sensorValue": "$sensorValue"
      }
    }
  }}
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...