2017-02-27 4 views
0

私は現在、このような問題に遭遇しています:MongoDBを使ってSpringブートでアンワインドした後のページ付けの仕方は?

私は配列プロパティに旅館を持つオブジェクトを持っています。 UIにBsを表示したいのですが、あまりにも多くのデータがあるため、何とか改ページする必要があります。問題は、私はいくつかの研究をしましたが、最初に解き放つことができる解決策を見つけることができませんでした。

A:

{ 
    id : 1, 
    Bs : [{ 
     id: 29 
    },{ 
     id : 3 
    }] 
} 

私は集約を使用している場合、私は、BSをほどくことができますが、その後、それらをページ付けすることはできません。ページネーションは大きな問題です。

私がPagingAndSortingRepositoryを使用すると、ページを設定できますが、元に戻すことはできません。後で手作業で巻き戻しても、巻き戻す前に改ページしたので、結果は望み通りにはなりません。

クエリ基準を使用している場合は、&という制限をスキップしてページを設定できますが、ページネーションを行う前にどのようにして元に戻すかわかりません。

大きな質問:最初に巻き戻して巻き戻しの結果を改ページするにはどうすればよいですか?

EDIT:MongoDBの中

例データオブジェクトは:

{ 
    id: 1, 
    ts: 1488208130000, 
    logs: [{ 
     id: 1, 
     type: 4 
    },{ 
     id: 2, 
     type: 7 
    }] 
}, 
{ 
    id: 2, 
    ts: 1488208150000, 
    logs: [{ 
     id: 2, 
     type: 4 
    }] 
} 

私は指定された場合typeを経ても、TSを経由してたstartDate & endDateに、DESCの間にTSでlogsを照会します。しかし、先週を選択した場合(例えば1秒あたり1に近づいている場合)、あまりにも多くのデータオブジェクトが存在するため、ページネーションが必要です。私は、データオブジェクト内にいくつのログがあるのか​​わかりません。だから、私は最初に改ページできず、次にログを巻き戻すことができません。番号はおそらく一致しません。私はサイズ100のデータ収集2のページを照会するかもしれませんが、ログを巻き戻したときには、希望するものが4734個ありますtype

答えて

1

実際には$slice演算子を使用してmongoで配列をスライスすることができます。

など。

db.collection.findOne({_id:1}, {B: $slice: [start, end]}) 

あなたはそれでかなり素晴らしいことをすることができます。詳細については、ドキュメントを参照してください。https://docs.mongodb.com/manual/reference/operator/projection/slice/

+0

編集部分 – kalahari

関連する問題