首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在数组中的某个位置查找元素的最大值

在数组中的某个位置查找元素的最大值
EN

Stack Overflow用户
提问于 2017-05-30 22:11:23
回答 1查看 156关注 0票数 1

我有一组传感器数据,每个文档都有以下结构:

代码语言:javascript
运行
复制
[{ _id: 592d9b0e276bd2136caacca0,
    name: 5
    light: [ ... ],
    temperature: [ ... ],
    UV: [ ... ],
    RA: [ ... ]
}]

每个传感器的每个阵列都有100个元素的长度。

例如,我如何检索哪个名称的温度值最高(在温度数组中)?

对于第一个元素或最后一个元素,有很多解决方案,但我似乎找不到如何解决数组中任意位置的问题。

这是我已经拥有的:

代码语言:javascript
运行
复制
db.sensors.aggregate([
    { $unwind: "$name" },
    { $sort: { "temperature": -1} },
    { $limit: 1}
]);

但是,正如您所看到的,"{ $sort:{“温度”:-1 }“的行将不能工作。我真的不明白如何指定只对温度数组的42位置的元素进行排序。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-31 01:26:22

如果在给定位置寻找值,则可以使用$arrayElemAt在所提供的位置返回值。对于它,常用的数组表示法是n-1,所以第42位是从0开始的索引中的41

代码语言:javascript
运行
复制
db.sensors.aggregate({
  { "$addFields": {
     "pos": { "$arrayElemAt": [ "$temperature", 41 ] } }
  }},
  { "$sort": { "pos": -1 } },
  { "$limit": 1 }
])

您甚至可以通过使用$exists作为查询参数来加快进程,只需要查看实际有42个元素的数组,因为其他任何东西都会被丢弃:

代码语言:javascript
运行
复制
db.sensors.aggregate({
  { "$match": { "temperature.41": { "$exists": true } } },
  { "$addFields": {
     "pos": { "$arrayElemAt": [ "$temperature", 41 ] } }
  }},
  { "$sort": { "pos": -1 } },
  { "$limit": 1 }
])

还请注意,在没有$addFields管道运算符的早期版本中,可以指定希望随$project返回的所有字段。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44272740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档