Что такое тип справочных данных firestore хорошо для?



Я просто изучаю новый Firebase Firestore и он содержит тип данных под названием reference. Мне непонятно, что это делает.




  • это как внешний ключ?

  • можно ли использовать его для указания на коллекцию, которая находится где-то еще?

  • если reference - это фактическая ссылка, я могу использовать его для запросов? Например, могу ли я иметь ссылку, которая указывает непосредственно на пользователя, вместо того, чтобы хранить идентификатор пользователя в текстовом поле? И может Я использую эту ссылку пользователя для запроса?

592   2  

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

    Ничего не найдено.