【发布时间】:2017-04-05 06:43:30
【问题描述】:
我对 mongo db 相当陌生。我想从我在 mongo 中的 mnocollection 集合中获取一些数据。这个mnocollection 具有三个字段_id、objId 和state。
我想返回所有_id 小于或等于某个值的 max(state)。此数据由objId 分组。例如:where max(state)<=410
不确定是否能够正确解释。
在 SQL 中(可能是语法不正确,但您可能会了解预期的内容)我会写。
select t._id
from mnocollection t
where exists (select 1
from mnocollection b
group by b.objId
where t.state = b.state
having max(state) <= 410 )
mnocollection 中的样本数据:
[
{
_id: 121.56.1,
state: 310,
objId: 45678,
},
{
_id: 11.89.56,
state: 405,
objId: 78996,
},
{
_id: 121.89.2,
state: 409,
objId: 45678,
}
]
预期输出:
[
{_id: 121.89.2},
{_id: 11.89.56}
]
在这里,如果我按objId 分组,那么objId=45678 的max(state) 是409,对应的_id 是121.89.2。同样,objId=78996 的 max(state) 是 405,对应的 _id 是11.89.56。这就是为什么 _id: 121.89.2 & 11.89.56 是预期的输出。我想在mongo中做到这一点。有什么建议吗?
【问题讨论】:
-
请添加您的
mnocollection的示例文档和预期输出 -
试试这个“db.mnocollection.find({ "state":{$lte:410} },{"_id":1})"
-
@felix check nw..我已添加示例数据和预期输出。
标签: java mongodb mongodb-query aggregation-framework