我有这样的mongodb集合:
{
"_id" : ObjectId("51111618b419e37023f5070c"),
"checkCode" : "statusCode",
"checkDate" : ISODate("2013-02-05T18:24:24.927Z"),
"domain" : ObjectId("511102021ffae419c2363c33"),
"pageUrl" : "/index.html",
"checkResult" : "404"
}
该集合可以包含许多具有相同域,pageUrl,checkCode但不同checkResult(或相同)和不同checkDate(检查日期)的记录。
因此我需要在给定域中仅按pageUrl和checkCode选择最后一个checkResult。什么是最好和更快的方法(域名和检查结果可能有很多记录)?我应该使用group或map / reduce吗?明显的工作太慢......
答案 0 :(得分:1)
您可以像这样使用聚合框架:
db.col.aggregate([
{$match:{domain: ObjectId("511102021ffae419c2363c33")}},
{$sort:{checkDate:-1}},
{$group: {_id: {pageUrl: '$pageUrl', checkCode: '$checkCode'}, checkResult: {$first: '$checkResult'}}}
])
将$match
和$sort
与$first
运算符一起使用可以使用索引,从而可以为至少大量的记录创建一个高性能组。