Я думаю, что вы хотите получить случайным образом 20 разных изображений из любой коллекции пользователя.Тем не менее, если вы не решите использовать другую структуру и хотите, чтобы все данные были вложенными, вы можете выбрать запрос collectionGroup.
Бит "random" немного сложен, и выВозможно, вы захотите использовать некоторые хакерские способы заставить его работать.Но начиная с получения доступа к вложенным вложенным коллекциям различных пользователей:
Все эти данные, независимо от пользователя, хранятся в коллекциях с именем MyBooks
, поэтому вы можете выполнить запрос collectionGroup
на MyBooks
.
То, как я это сделал бы со случайным битом случайного изображения, было бы в частичном коде псевдокода, чтобы дать вам идею (я подтвердил collectionGroups в SDK Java):
usedImages = []
for numbers 0 to 19 {
let num = false
while (!num) {
let tempNum = Math.floor(Math.random() * 10);
if (!( usedImages.includes(tempNum)){
num = tempNum
}
}
var allBooks = db.collectionGroup('MyBooks').where('imageKey', '==', num);
allBooks.get().then(function (querySnapshot) {
querySnapshot.forEach(function (doc) {
console.log(doc.id, ' => ', doc.data());
});
});
}
Идея с кодом состоит в том, чтобы сгенерировать 20 случайных и уникальных чисел num
(возможно, лучшие способы сделать это, чем то, что я взломал вместе выше), а затем взять это число и найти все записи в MyBooks
, где существует этот imageKey.Это хакерский способ обхода кода случайного изображения, когда вам нужно будет добавить глобально уникальный идентификатор для каждого из них.
Коллекция группы не указывает путь родительских коллекций, поэтому она позволяет вам искатьсразу во все коллекции.
В приведенном выше псевдокоде выполняется 20 запросов групп коллекций.
Подробнее о запросах групп коллекций можно найти здесь: https://firebase.google.com/docs/firestore/query-data/queries#collection-group-query