Я хотел бы получить только один элемент из каждой группы полей: вот мой результат

[{
"_id":{"device_id":"9"},
"x":["2019-11-17T18:03:33.000Z","2019-11-17T12:02:35.000Z"],
"y":["93","3"]
},
{
"_id":{"device_id":"8"},
"x":["2019-11-16T12:05:33.000Z","2019-11-16T12:02:35.000Z"],
"y":["33","3"]
}]

Я хотел бы получить только последние вставленные данные, что означает только одно значение из x и одно значение из y. Это код:

aggregate([
            { "$sort": { "timeStamp": -1 } },
            {
                $group:
                {
                    _id: { device_id: '$device_id' },
                    x: {
                        $push: "$timeStamp"

                    },
                    y: {
                        $push: "$value"
                    },
                    device_name: {
                        $push: "$device_name"
                    },
                }
            }
}]

Я попытался добавить проект exp:

 {
    $project: {
        time: "$x",
        value:"$y",
        integerValues:{
            $map:{
                input: "x",
                as: "integerValue",
                in: { $trunc: "$$integerValue" }
            }
        }
    }
}

Это результат, который я ожидаю получить:

{
    "_id":{"device_id":"8"},
    "x":["2019-11-16T12:05:33.000Z"],
    "y":["33"]
},
{
    "_id":{"device_id":"9"},
    "x":["2019-11-17T18:03:33.000Z"],
    "y":["93"]
}

Я так много искал об этой проблеме без какого-либо решения

0
ahmed 18 Ноя 2019 в 15:23

1 ответ

Все, что вам нужно, это один этап проекта

aggregate([{
  $project: {
    x: {
      $max: "$x"
    },
    y: {
      $max: "$y"
    }
  }
}])

Результат, который вы получите, будет примерно таким,

[
  {
    "_id": {
      "device_id": "9"
    },
    "x": "2019-11-17T18:03:33.000Z",
    "y": "93"
  },
  {
    "_id": {
      "device_id": "8"
    },
    "x": "2019-11-16T12:05:33.000Z",
    "y": "33"
  }
]
1
Elvis 27 Ноя 2019 в 10:21