0
以内に最低値と最高値を取得:だから、それは基本的に異なるプロセスから複数のメッセージが含まれていグループのエントリと私はこれに似たデータを含むコレクション持つグループ
{ processName: "TestImport", processId: 1, message: "Started", time: 1486609206370 }
{ processName: "TestImport", processId: 1, message: "Finished",
time: 1486609207388 }
{ processName: "TestImport", processId: 2, message: "Started", time: 1486779281773 }
{ processName: "TestImport", processId: 2, message: "Finished",
time: 1485992810029}
{ processName: "SomeOtherImport", processId: 1, message: "Started", time: 1486779281773 }
{ processName: "SomeOtherImport", processId: 1, message: "Finished",
time: 1487993829281 }
を。各プロセスは、processName
およびそれに続くprocessId
によって識別されます。
今、最新のプロセスを選択するクエリを作成したいので、最もIDが高く、最も古いメッセージと最後のメッセージの時刻と最後のメッセージを返します。
私はaggregate
を使用して、このようにそれをグループ化することによって、これに近いようになってきている:
db.status_history.aggregate([
{
$group: {
_id: {
name: "$processName",
id: "$processId"
},
processId: {
$last: "$processId"
},
message: {
$last: "$message"
},
startTime: {
$first: "$time"
},
endTime: {
$last: "$time"
}
}
}]);
しかし、このように、私は、各プロセスのための最高のIDを持つエントリを取得しないだけでなく、それぞれに1つのエントリID :(正しい値で):
{ processName: "TestImport", processId: 1, message: "Finished", startTime: 1486609206370, endTime: 1486609207388 }
{ processName: "TestImport", processId: 2, message: "Finished", startTime: 1486779281773, endTime: 1485992810029 }
{ processName: "SomeOtherImport", processId: 1, message: "Finished", startTime: 1486779281773, endTime: 1487993829281 }
最高のIDのそれぞれの結果が得られるように変更する必要はありますか?このように:
{ processName: "TestImport", processId: 2, message: "Finished", startTime: 1486779281773, endTime: 1486923811716 }
{ processName: "SomeOtherImport", processId: 1, message: "Finished", startTime: 1486779281773, endTime: 1487993829281 }
グループの前に '{$ sort:{" processId ": - 1、" timestamp ":1}}'を追加してみてください。 – Veeram