Я просто изучаю новый Firebase Firestore, и он содержит тип данных с именем reference
. Мне не ясно, что это делает.
- Это как внешний ключ?
- Можно ли использовать его для указания на коллекцию, которая находится где-то еще?
- Если
reference
это реальная ссылка, могу ли я использовать ее для запросов? Например, я могу иметь ссылку, которая указывает непосредственно на пользователя, вместо того, чтобы хранить userId в текстовом поле? И могу ли я использовать эту ссылку для запроса?
firebase
google-cloud-firestore
Юрген Брандштеттер
источник
источник
Ответы:
Ссылки очень похожи на внешние ключи.
Выпущенные в настоящее время SDK не могут хранить ссылки на другие проекты. В рамках проекта ссылки могут указывать на любой другой документ в любой другой коллекции.
Вы можете использовать ссылки в запросах, как и любое другое значение: для фильтрации, упорядочения и подкачки (startAt / startAfter).
В отличие от внешних ключей в базе данных SQL, ссылки не полезны для выполнения объединений в одном запросе. Вы можете использовать их для зависимых поисков (которые выглядят как соединения), но будьте осторожны, потому что каждый прыжок приведет к очередному обращению к серверу.
источник
friends
коллекция, в которой перечислены все мои друзья (friends/myId
). Затем я ссылаюсь на этот документ вfriends
поле другого документа (group/groupId
). Я хотел бы показать только моих друзей , которые находятся в этой группе, делать что - то вроде этого:where('friends.myId', '==', true)
.Добавляя ниже, что работает для меня, используя ссылки в Firestore.
Как говорят другие ответы, это как внешний ключ. Ссылочный атрибут не возвращает данные справочного документа. Например, у меня есть список продуктов со ссылкой на userRef в качестве одного из атрибутов продукта. Получение списка продуктов дает мне ссылку на пользователя, который создал этот продукт. Но это не дает мне детали пользователя в этой ссылке. Я использовал другой бэкэнд в качестве сервисов с указателями, у которых до этого был флаг «populate: true», который возвращает данные пользователя, а не просто ссылочный идентификатор пользователя, что было бы здорово иметь здесь (надеюсь, в будущем улучшении). ).
Ниже приведен пример кода, который я использовал для задания ссылки, а также для получения списка продуктов, а затем для получения сведений о пользователе по указанному идентификатору ссылки.
Установить ссылку на коллекцию:
Получить коллекцию (продукты) и все ссылки на каждый документ (данные пользователя):
Надеюсь это поможет
источник
db.collection('products').get()
. Вы пытались получить пользователя напрямую? Я думаю,newItem.userRef.get()
должно работать вместоdb.collection("users").doc(newItem.userRef.id).get()
uid
ссылку и ссылку через него.reference
если мы не можем использовать его как настоящий внешний ключ, который должен работать?reference
над astring
заключается в том, что вы можетеget()
напрямую обращаться к ссылке. Пока не очень полезно. Надеюсь, они добавят возможность автоматически заполнять ссылки соответствующими объектами!Для тех, кто ищет решение Javascript для запроса по ссылке - концепция такова, что вам нужно использовать объект «ссылка на документ» в операторе запроса
(Престижный ответ здесь: https://stackoverflow.com/a/53141199/1487867 )
источник