Firestoreコレクションに名前'users'
を付け、各ユーザーの名前で多くのドキュメントを持っています。
アルファベット順で一度に25人のユーザーのリストを取得したいのですが、これを試してみました。
const allUsersRef = admin.firestore().collection('users').orderBy('name').offset(0).limit(25)
allUsersRef.get().then((top25Users) => {
let usersList = '``` << Users LIST >>\n'
if (!top25Users.empty) {
top25Users.forEach(eachUser => {
usersList = usersList + `\n${eachUser.data().name} \n${eachUser.data().id}`
})
console.log(usersList)
return
} else {
message.channel.send('Looks like we have no users at the moment!')
return
}
}).catch((error) => {
console.log(error)
return
})
これにより、上位25人のユーザーを簡単に取得できます。しかし、次の25が必要な場合はどうなりますか?これはDiscordボットであり、ボタンを追加して(さらにquery.start()
表示)、このFirebaseビデオに示すように結果を続行できるAndroidアプリケーションではありません
私は使用できますOFFSET
が、ユーザーの数が多いためoffset(500)
、手頃な価格ではありません: '(
また、ユーザーをアルファベット順にフェッチする必要があります。新しいユーザーが登録すると、順序が変わります。
TL、DR:ユーザーのリストをアルファベット順に並べた場合、ユーザーをリストの126位から150位まで取得するにはどうすればよいですか。さらにオフセットを使用しません。これは、より多くのリソースを使用するためです。
最初にこれをfirebaseリアルタイムデータベースに入れましたが、次にいくつかの高度なクエリが必要だったので、ここに移行しました:)
Database Struture: Just a single collection named USERS and documents named as username in it.
PS:
const startAtRes = await db.collection('cities')
.orderBy('population')
.startAt(1000000)
.get();
Firebase Documentationのこのような^を使用することはできません。どこから始めればよいかわからないためです。新しいユーザーとしてリストが変更されるので、登録してください!
Firestoreは効率的なオフセットベースのページネーションをサポートしていません。を使用するとoffset()
、その時点までのすべてのドキュメントの読み取りに対して料金が発生します。唯一の効率的な改ページを空くで説明したように、ページ間を移動するために、あなたはアンカー文書を提供する必要があり、またはアンカー文書のプロパティを文書化。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加