2017-04-15 10 views
0

はモンゴDBにこれらのダミーの文書を持つと仮定します

{ 
    "_id" : ObjectId("58f24f38e5fe51fa52e3a90c"), 
    "ref" : "r1", 
    "ts" : 1492275000121 
} 
{ 
    "_id" : ObjectId("58f24f54e5fe51fa52e3a90d"), 
    "ref" : "r1", 
    "ts" : 1492275028031 
} 
{ 
    "_id" : ObjectId("58f24f5ce5fe51fa52e3a90e"), 
    "ref" : "r2", 
    "ts" : 1492275036560 
} 
{ 
    "_id" : ObjectId("58f24f62e5fe51fa52e3a90f"), 
    "ref" : "r3", 
    "ts" : 1492275042696 
} 
{ 
    "_id" : ObjectId("58f24f64e5fe51fa52e3a910"), 
    "ref" : "r2", 
    "ts" : 1492275044864 
} 
{ 
    "_id" : ObjectId("58f24f69e5fe51fa52e3a911"), 
    "ref" : "r1", 
    "ts" : 1492275049360 
} 
{ 
    "_id" : ObjectId("58f24f6be5fe51fa52e3a912"), 
    "ref" : "r3", 
    "ts" : 1492275051880 
} 
{ 
    "_id" : ObjectId("58f24f6ee5fe51fa52e3a913"), 
    "ref" : "r3", 
    "ts" : 1492275054512 
} 
{ 
    "_id" : ObjectId("58f24f70e5fe51fa52e3a914"), 
    "ref" : "r2", 
    "ts" : 1492275056344 
} 

私は何を達成したいことは、文書、最新のタイムスタンプ(ts)を持つ各refに1つのリストを取得することです。

ような何か:

  • は私が期待しref["r1", "r2"]
  • に各グループのref
  • することにより、これらの文書はts

に応じて、最新のドキュメントを返すグループであるすべての文書を取得:

[ 
    { 
     "ref":"r1", 
     "ts": 1492275049360 
    },{ 
     "ref":"r2", 
     "ts": 1492275056344 
    } 
] 

1回のDBリクエストでこれを実行できますか?集計関数を調べましたが、グループの最新文書を取得する方法が見つかりませんでした。

答えて

1

$sortts desc $first$groupで使用できます。

db.collection.aggregate(
    [ 
    { $match: { ref: { $in: ["r1", "r2"] } } }, 
    { $sort: { ts: -1 } }, 
    { $group: { _id: "$ref", ts: { $first: "$ts" } } } 
    ] 
) 
関連する問題