我在信息表中有几条记录。对于参与其中的几个用户,infoId可以是常见的。信息收集看起来像:
{
_id:ObjectId(),
infoId:001,
userName:x,
designation:xx,
year:10
},
{
_id:ObjectId(),
infoId:001,
userName:a,
designation:aa,
year:10
},
{
_id:ObjectId(),
infoId:001,
userName:y,
designation:yy,
year:3
},
{
_id:ObjectId(),
infoId:002,
userName:x,
designation:xx,
year:7
},
{
_id:ObjectId(),
infoId:003,
userName:x,
designation:xx,
year:10
},
{
_id:ObjectId(),
infoId:001,
userName:c,
designation:cc,
year:10
}....
从信息表中,我想根据分组infoId获取记录。所以我可以使用聚合查询来获得这个。
db.information.aggregate([$group:{_id:$infoId,users:{$push:"$$ROOT"},$sort:{infoId:-1}]);
我会得到如下结果:
[{
_id:003,
users:[
{
_id:ObjectId(),
infoId:003,
userName:x,
designation:xx,
year:10
}]
},
{
_id:002,
users:[{
_id:ObjectId(),
infoId:002,
userName:x,
designation:xx,
year:7
}]
},
{
_id:001,users:[
{
_id:ObjectId(),
infoId:001,
userName:x,
designation:xx,
year:10
},
{
_id:ObjectId(),
infoId:001,
userName:a,
designation:aa,
year:10
},
{
_id:ObjectId(),
infoId:001,
userName:y,
designation:yy,
year:3
},
{
_id:ObjectId(),
infoId:001,
userName:c,
designation:cc,
year:10
}
]}
}]
但是在这里说我希望以这样的方式给予一些限制,它只需要检索到它。
如果我将说限制为4,那么它需要返回_id:003,_id:002,在_id:001中只有两个。 注意:分组后的任何指定都不应该是结果。
那么如何在mongodb中查询?