Что такое тип справочных данных firestore хорошо для?
Я просто изучаю новый Firebase Firestore и он содержит тип данных под названием reference. Мне непонятно, что это делает.
- это как внешний ключ?
- можно ли использовать его для указания на коллекцию, которая находится где-то еще?
- если
reference- это фактическая ссылка, я могу использовать его для запросов? Например, могу ли я иметь ссылку, которая указывает непосредственно на пользователя, вместо того, чтобы хранить идентификатор пользователя в текстовом поле? И может Я использую эту ссылку пользователя для запроса?
2 ответов:
ссылки очень похожи на внешние ключи.
выпущенные в настоящее время SDK не могут хранить ссылки на другие проекты. В рамках проекта, ссылки могут указывать на другой документ в любой другой коллекции.
вы можете использовать ссылки в запросах, как и любое другое значение: для фильтрации, упорядочивания и подкачки (startAt/startAfter).
в отличие от внешних ключей в базе данных SQL, ссылки не являются полезными для выполнения соединений в одном запросе. Вы можете использовать они для зависимых поисков (которые кажутся объединенными), но будьте осторожны, потому что каждый прыжок приведет к еще одному обходу сервера.
добавление ниже того, что работало для меня, используя ссылки в Firestore.
Как говорят другие ответы, это похоже на внешний ключ. Однако ссылочный атрибут не возвращает данные ссылочного документа. Например, у меня есть список продуктов со ссылкой userRef в качестве одного из атрибутов продукта. Получив список продуктов, дает мне ссылку на пользователя, который создал этот продукт. Но это не дает мне подробную информацию о пользователе в этой ссылке. Я использовал другие back end как службы с указателями перед этим имеют флаг" заполнить: true", который возвращает сведения о пользователе вместо просто ссылочного идентификатора пользователя, который было бы здорово иметь здесь (надеюсь, будущее улучшение).
Ниже приведен пример кода, который я использовал, чтобы установить ссылку, а также получить список коллекции продуктов, а затем получить сведения о пользователе из идентификатора ссылки пользователя.
установить ссылку на коллекцию:
let data = { name: 'productName', size: 'medium' } data.userRef = db.doc('users/' + firebase.auth().currentUser.uid); db.collection('products').add(data);получить коллекцию (продукты) и все ссылки на каждый документ (Сведения о пользователе):
db.collection('products').get() .then(res => { vm.mainListItems = []; res.forEach(doc => { let newItem = doc.data(); newItem.id = doc.id; if (newItem.userRef) { newItem.userRef.get() .then(res => { newItem.userData = res.data() vm.mainListItems.push(newItem); }) .catch(err => console.error(err)); } else { vm.mainListItems.push(newItem); } }); }) .catch(err => { console.error(err) });надеюсь, что это помогает
Comments