首页 新闻 会员 周边

请指教!MongoDB查询前十条数据中的最大值

0
[已解决问题] 解决于 2016-12-08 17:24

怎么在MongoDB中查询指定id的前十条数据中最大值,最小值,这十条数据和,以及该id在表中总共有多少条数据?

缘猿~的主页 缘猿~ | 菜鸟二级 | 园豆:216
提问于:2016-12-08 15:21
< >
分享
最佳答案
0

没太看明白你的问题。你能写个t-sql描述下么?

奖励园豆:5
Daniel Cai | 专家六级 |园豆:10424 | 2016-12-08 15:44

SELECT (SUM(t.r)-MAX(t.r)-MIN(t.r))/8 avg,(SELECT COUNT(*) from a WHERE id="1234")count
FROM(SELECT r from a WHERE id="1234" ORDER BY time ASC limit 10)t

 

表a中我按照id查询,根据时间排序要前10条数据去掉最大值,最小值剩下8个求平均值,额外还要该id在表中一共多少条数据

缘猿~ | 园豆:216 (菜鸟二级) | 2016-12-08 15:54

db.reshis_2016.find(
    {d:"BATT40000001"}
    ).sort({t:1}).limit(10)

我在mongodb中按时间排序要前10个数据,但是不能同一条语句求最大值,最小值,sum??

缘猿~ | 园豆:216 (菜鸟二级) | 2016-12-08 16:00

@缘猿~: 你要一个语句写出来?如果一个语句写的话需要做遍历。分两个可否?

Daniel Cai | 园豆:10424 (专家六级) | 2016-12-08 16:03

两个语句我会写,主要是这样写如果数据很多,访问数据库的次数也多,性能会变低的,如果是一条可以降低访问次数

缘猿~ | 园豆:216 (菜鸟二级) | 2016-12-08 16:39

@缘猿~: count那个不说了,单独写。

另一个

db.a.aggregate([{{$match:{id:1234}},  {$sort:{time:1}}, {$limit:10}, $group:{
                sum:{$sum:"$r"},
                avg:{$avg:"$r"},
                count:{$sum:1}
            }}])

 

手敲的,可能有问题,自己对着改下吧。

Daniel Cai | 园豆:10424 (专家六级) | 2016-12-08 16:46

@Daniel Cai: db.a.aggregate(
    {$match:{id:"1234"}},
    {$sort:{"time":-1}},
    {$limit:10},
    {$group:{_id:"$id",sum:{$sum:"$r"},max:{$max:"$r"},min:{$min:"$r"}}}
    )

分着写我也是这样想的,O(∩_∩)O哈哈~

不过要是合着就更好了!实在不能和那就分着吧, O(∩_∩)O谢谢

缘猿~ | 园豆:216 (菜鸟二级) | 2016-12-08 16:58
其他回答(1)
0

之前在MongoDB萌阔论坛上看到过关于MongoDB查询最大值的相关讨论,你可以去看看,希望能帮助到你。
萌阔论坛:http://forum.foxera.com/mongodb/topic/596/請問一個找出最大值的語句?un=Jesse

JesseShi | 园豆:274 (菜鸟二级) | 2017-06-06 10:03
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册