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のみを選択する必要があります。これを行うための最良かつ高速な方法は何ですか(ドメインごとに多数のレコードがあり、結果を確認する可能性があります)?グループまたはマップ/リデュースを使用する必要がありますか?Distinctの動作が遅すぎます...

4

1 に答える 1

1

ここでは、次のように集計フレームワークを使用できます。

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

$matchand $sortwith演算子を使用すると$first、インデックスを使用できるため、少なくともかなりの数のレコードのパフォーマンスグループを作成できます。

于 2013-02-06T09:03:27.687 に答える