0

我有这样的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 。什么是最好和更快的方法(域和检查结果可能有很多记录)?我应该使用组还是映射/减少?不同的工作太慢了......

4

1 回答 1

1

您可以在这里使用聚合框架,如下所示:

db.col.aggregate([
    {$match:{domain: ObjectId("511102021ffae419c2363c33")}},
    {$sort:{checkDate:-1}},
    {$group: {_id: {pageUrl: '$pageUrl', checkCode: '$checkCode'}, checkResult: {$first: '$checkResult'}}}
])

$matchand$sort$first运算符一起使用允许使用索引,这可以为至少大量记录创建一个高性能组。

于 2013-02-06T09:03:27.687 回答