猫鼬聚合按字段排序一个数组

时间:2019-11-18 12:23:13

标签: mongodb mongoose mongodb-query aggregate

我只想从每组字段中获取一个元素: 这是我的结果

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

我在没有任何解决方案的情况下搜索了如此多的问题

1 个答案:

答案 0 :(得分: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"
  }
]