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

Posted

技术标签:

【中文标题】猫鼬聚合按字段排序一个数组【英文标题】:mongoose aggregate sort one array by field 【发布时间】:2020-03-13 19:39:54 【问题描述】:

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

[
"_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】:

您只需要一个项目阶段

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"
  
]

【讨论】:

以上是关于猫鼬聚合按字段排序一个数组的主要内容,如果未能解决你的问题,请参考以下文章

如何仅在猫鼬中使用聚合填充嵌套在对象数组中的字段?

如何按热门字段(文本字段)对聚合进行排序?或者是不是有可能按文本字段对聚合进行排序(不使用_term)

MongoDB 实用数组聚合操作 (2)

Mongoose:如何使用两个字段对聚合响应进行排序

按字段 1 聚合组并计算字段 2 的总和

如何在猫鼬聚合中使用字段值? (节点)