Спасибо, что ответили, что вы работали внутри облачных функций и, таким образом, используете API администратора. Вот снова ссылка на , как сделать запрос в firestore .
Простая функция для демонстрации запроса, подобного приведенному выше (я предполагаю, что коллекция называется 'users') находится здесь:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
let db = admin.firestore();
exports.doQuery = functions.https.onRequest((request, response) => {
const queryRef = db.collection('users').where('email', '==', 'any123@gmail.com');
queryRef.get().then((snap) => {
if (snap.empty) {
response.send('no result');
} else {
let result = '';
snap.forEach((doc) => {
result = result + doc.id + ' => ' + JSON.stringify(doc.data()) + '<br>';
})
response.send(result);
}
}).catch((err) => { response.send('error'); });
});
В вашем примере, хотя вы показываете, что существует промежуточный уровень userauth
. Предполагая, что это карта (а не, скажем, другая коллекция или что-то в этом роде), вы можете использовать FieldPath
, чтобы ваш запрос проходил по карте. Этот запрос будет выглядеть следующим образом и будет по-прежнему возвращать весь пользовательский документ:
const queryRef = db.collection('userProfiles').where(
new admin.firestore.FieldPath('userauth','email'), '==', 'any123@gmail.com');
Что касается вопроса эффективности, этот тип запроса (простое равенство) будет довольно эффективно выполнять в firestore, так какпо умолчанию вы получаете индекс для каждого значения. Более сложные запросы могут быть более дорогими, и вам потребуется создать индекс . Кроме того, с взимается плата только за возвращенные документы (при наличии как минимум одного документа для пустого набора результатов).
Сравнение с базой данных SQL потребует фактического тестирования производительности, конечно,и это гораздо более широкий вопрос, который включает в себя полный спектр типов запросов, которые вы делаете, полную структуру базы данных, какие индексы существуют, есть ли другие функции (например, ограничения), которые вы хотите использовать в базе данных SQL, которые не требуются. не предоставляются firestore, оптимизируете ли вы стоимость, время ожидания или что-то еще и т. д.