在MongoDB中,如何从每个id中获取最近30个结果并按id对它们进行分组
我必须从每个“testId”中提取最近30个文档,并按“testId”对它们进行分组 我尝试了在MongoDB中,如何从每个id中获取最近30个结果并按id对它们进行分组,mongodb,mongoose,mongodb-query,Mongodb,Mongoose,Mongodb Query,我必须从每个“testId”中提取最近30个文档,并按“testId”对它们进行分组 我尝试了$match和$group聚合,请查找以下代码 [ {"testId": "121", "testDetails": [{"result": "pass", "testName": "test1"},..]}, {"testId": "
$match
和$group
聚合,请查找以下代码
[
{"testId": "121", "testDetails": [{"result": "pass", "testName": "test1"},..]},
{"testId": "122", "testDetails": [{"result": "pass", "testName": "test2"},..]},
{"testId": "123", "testDetails": [{"result": "pass", "testName": "test3"},..]},
]
上面的代码返回了所有“testId”中最近的30个文档,但我不知道如何从每个可用的“testId”中获取30个最近的文档并对它们进行分组。而且,我不应该传递任何特定的“testId”或多个“testId”,我必须从集合中所有可用的“testId”中提取您可以使用
$slice
为每个testId
获取30个文档
- 已删除
,因为它不需要$limit
- 在最后一个
中,在$addFields
字段中使用testDetails
来获取我们之前已经排序过的前30个元素$slice
[
{"testId": "121", "testDetails": [{"result": "pass", "testName": "test1"},..]},
{"testId": "122", "testDetails": [{"result": "pass", "testName": "test2"},..]},
{"testId": "123", "testDetails": [{"result": "pass", "testName": "test3"},..]},
]
testResults.aggregate([
{
$match:
{
"testId": { "$exists": true };
}
},
{
$sort: { _id: -1 },
},
{
$limit: 30
},
{
$group: {
_id: "$testId",
testDetails: { $push: {result: "$result", testName: "$testName"} }
}
}
])
.exec(function (err, testResults) {
if (err)
res.send(err);
res.json(testResults);
});
testResults.aggregate([
{ $match: { testId: { "$exists": true } } },
{ $sort: { _id: -1 } },
{
$group: {
_id: "$testId",
testDetails: {
$push: {
result: "$result",
testName: "$testName"
}
}
}
},
{
$addFields: {
testDetails: { $slice: ["$testDetails", 30] }
}
}
])
.exec(function (err, testResults) {
if (err) res.send(err);
res.json(testResults);
});