私は現在、このような問題に遭遇しています:
私にはオブジェクトがあります A 配列プロパティを持つ Bs。 UIにBsを表示したいのですが、あまりにも多くのデータがある、私は何とか改ページする必要があります。問題は、私はいくつかの研究をしましたが、最初に解き放つことができる解決策を見つけることができませんでした。
A:
{
id : 1,
Bs : [{
id: 29
},{
id : 3
}]
}
集約を使用すると、Bsを元に戻すことはできますが、後でページを変更することはできません。ページネーションは大きな問題です。
私がPagingAndSortingRepositoryを使用するとページめくりはできますが、巻き戻せません。後で手動で巻き戻しても、前にページを変更したので、結果は望みどおりになりません。
クエリ基準を使用すると、スキップ&リミットでページを設定できますが、ページネーションを行う前にどのように解くかは分かりません。
大きな質問: どのように私は最初に巻き戻すことができますし、巻き戻しの結果を改ページすることができますか?
編集:
MongoDBのデータオブジェクトの例:
{
id: 1,
ts: 1488208130000,
logs: [{
id: 1,
type: 4
},{
id: 2,
type: 7
}]
},
{
id: 2,
ts: 1488208150000,
logs: [{
id: 2,
type: 4
}]
}
私は質問したい logs
startDateとendDateの間にts、ts経由でdesc、via経由で type
指定されている場合。 しかし、先週を選択した場合(例えば1秒あたり1に近づいている場合)、あまりにも多くのデータオブジェクトが存在するため、ページネーションが必要です。私はデータオブジェクトにどれだけのログがあるのか分からないので、最初にページを設定してログを巻き戻すことはできません。この数値はおそらく "一致"しませんでした。サイズ100のデータ収集2のページを照会することができますが、ログを巻き戻すと、47 type
.
回答:
回答№1は1実際には、mongoで配列をスライスすることができます。 $slice
オペレーター。
例えば。
db.collection.findOne({_id:1}, {B: $slice: [start, end]})
あなたはそれでかなり素晴らしいことをすることができます。その他の例については、ドキュメントを参照してください。 https://docs.mongodb.com/manual/reference/operator/projection/slice/