2017-04-24 13 views
0

以下は、数分ごとに10個のデバイスのレコードです。私はそれぞれのidのためのレコードのユニークなセットを返す必要があり、それぞれ最新のものでなければなりません。jsonオブジェクトを複数のパラメータでフィルタリングする方法は?

どのように私は弾力的な検索や他のソリューションでそれを行うことができます良いでしょう。

{ 
    {id: 1, time: 12345}, 
    {id: 2, time: 12346}, 
    {id: 1, time: 12347}, 
    {id: 2, time: 12348}, 
    {id: 1, time: 12349}, 
    {id: 3, time: 12350}, 
    ... // 10 different ids and 10000 records 
} 
+0

、あなたはのコレクションを返すようにしようとしていますオブジェクトは、各idのために1つで、それぞれのidの最新のtime値を持つオブジェクトでなければなりませんか? – Ken

+0

@ken 10000レコードのうち、ユニークなIDと最新の/最大の時間値を持つレコードを10個だけ返します。 – DragonKnight

答えて

1

これは私が得るほど近いです。元のデータセットに10を超えるユニークなIDがあるとしたら、どの10の結果を返すかを選択する方法が不明です。

var rawData = [ 
 
    {id: 1, time: 12345}, 
 
    {id: 2, time: 12346}, 
 
    {id: 1, time: 12347}, 
 
    {id: 2, time: 12348}, 
 
    {id: 1, time: 12349}, 
 
    {id: 3, time: 12350}, 
 
    {id: 4, time: 12351}, 
 
    {id: 2, time: 12352}, 
 
    {id: 7, time: 12353}, 
 
    {id: 5, time: 12354}, 
 
    {id: 3, time: 12355}, 
 
    {id: 6, time: 12356}, 
 
    {id: 3, time: 12357}, 
 
    {id: 7, time: 12358}, 
 
    {id: 6, time: 12359}, 
 
    {id: 9, time: 12360} 
 
] 
 

 
var maxSet = {}; 
 
// Get all of the max values 
 
rawData.forEach(function (currentValue, index, array) { 
 
    var currentMax = maxSet[currentValue.id] || null; 
 
    if(currentMax) { 
 
    if(currentValue.time > currentMax){ 
 
     maxSet[currentValue.id] = currentValue.time; 
 
    } 
 
    } else { 
 
    maxSet[currentValue.id] = currentValue.time; 
 
    } 
 
}); 
 
console.log(maxSet); 
 
// Convert back to object if necessary 
 
var keys = Object.keys(maxSet); 
 
var resultObjs = []; 
 
for(var key in keys) { 
 
    resultObjs.push({id: keys[key], time: maxSet[keys[key]]}); 
 
} 
 
console.log(resultObjs);

+0

Kenさん、ありがとうございます。実際の問題はより複雑なので、私は弾性検索で解決するために取り組んでいます。 – DragonKnight

1

私はあなたがこのために探している、それはユニークなidで最大timeを与えるだろうと思う: - ただ、明確にする

{ 
    "_source":false, 
    "aggs": { 
     "byId": { 
      "terms": { 
       "field": "id" 
      }, 
      "aggs": { 
       "byTime": { 
        "max": { 
         "field": "time" 
        } 
       } 
      } 
     } 
    } 
} 
関連する問題