Использование вложенной коллекции из возвращенного запроса - PullRequest
0 голосов
/ 23 апреля 2019

Я хотел знать, можно ли сослаться на подколлекцию после запроса документа? Я понимаю, что .get () возвращает обещание, и мы пишем функцию для получения документа. Но возможно ли использовать документ, запрашиваемый для доступа к этому подколлекции, без необходимости получать идентификатор документа и использовать его внутри .doc ()?

1 Ответ

1 голос
/ 23 апреля 2019

Нет, это невозможно без выдачи нового запроса. Не существует метода, который бы позволял это для DocumentSnapshot.

Чтобы проиллюстрировать это, представим, что вы получаете городской документ через запрос (который, как вы знаете, возвращает только один документ):

var citiesRef = db.collection("cities");
citiesRef.where("name", "==", "Brussels").get()
  .then(function(querySnapshot) {
      if (!querySnapshot.empty) {
          var doc = querySnapshot.docs[0];
          console.log("Document data:", doc.data());
      } else {
          // doc.data() will be undefined in this case
          console.log("No such document!");
      }
  }).catch(function(error) {
      console.log("Error getting document:", error);
  });

и вы знаете, что в этом документе есть подгруппа для ресторанов этого города. Если вы хотите получить эту коллекцию, вам нужно будет сделать:

var citiesRef = db.collection("cities");
citiesRef.where("name", "==", "Brussels").get()
  .then(function(querySnapshot) {
      if (!querySnapshot.empty) {
          var doc = querySnapshot.docs[0];
          var restaurantsCollRef = citiesRef.doc(doc.id).collection("restaurants");
          return restaurantsCollRef.get();    
      } else {
          throw new Error("No such document!");
      }
  })
  .then(function(querySnapshot) {
      querySnapshot.forEach(function(doc) {
         console.log(doc.id, " => ", doc.data());
      })
  }).catch(function(error) {
      console.log("Error getting document:", error);
  });

Следует отметить, что на самом деле документ и один из его подколлекций, с технической точки зрения, не связаны друг с другом.

Давайте рассмотрим пример: представьте документ doc1 в коллекции col1

col1/doc1/

и еще один subDoc1 в коллекции subCol1 (sub-)

col1/doc1/subCol1/subDoc1

На самом деле, они просто разделяют часть своего пути, но больше ничего. Одним из побочных эффектов этого является то, что если вы удаляете документ, его подколлекция (ы) все еще существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...