选择不同的结果

时间:2013-02-05 16:08:22

标签: mongodb pymongo

我有这样的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吗?明显的工作太慢......

1 个答案:

答案 0 :(得分:1)

您可以像这样使用聚合框架:

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

$match$sort$first运算符一起使用可以使用索引,从而可以为至少大量的记录创建一个高性能组。