如何在没有订阅的情况下从Firestore获取数据

时间:2018-09-06 19:39:19

标签: angular google-cloud-firestore

我正在尝试使用angularfire2 /角度6为Firestore中的特定用户获取单个元素(路径)。

我目前将图像存储到Firestore数据库中。然后,我将记录添加到用户的UID和文件路径到Firestore数据库中。

我试图通过查找用户的UID来获取单个商品(路径)。我知道如何在Firestore中使用查询。我想获取没有订阅的路径。

有人知道如何在没有订阅的情况下从Firestore中提取数据吗?

getUserImage(uid) {
      const imageRef = this.afs.collection('/users', ref => ref.where('userUID', '==', uid));
      return imageRef.snapshotChanges().pipe(map(results1 => {
        return results1.map((x) => {
          return x.payload.doc.data() as User;
        });
       }));
    }

示例:如果我要获取有关单个用户的信息;我可以不用订阅吗?

2 个答案:

答案 0 :(得分:0)

您可以将普通的旧JavaScript API用于getting a document。它公开了执行一次文档检索的get()方法。从链接的文档中:

var docRef = db.collection("cities").doc("SF");

docRef.get().then(function(doc) {
    if (doc.exists) {
        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);
});

您只需要一个Firestore数据库实例即可开始使用

答案 1 :(得分:0)

从FireStore集合获取数据的唯一方法是通过订阅。但是,您可以使用RXJS命令在订阅之前操纵数据流。 一个例子是:

在此示例中,this.afs引用了我的AngularFireStore,然后我开始收集特定用户的信息。然后,我运行FirebaseStore提供的snapshotChanges()函数。

现在,为了获取所需的特定数据,您希望使用.pipe启动所有RXJS 6。认为这是隧道中的马里奥。您首先要从管道开始。 现在,您要使用MAP运算符更改所需的内容。在这种情况下,我想映射然后获取有效负载。

现在,您可以运行.data()函数以返回所有数据;但是,我运行.get数据是因为我只想返回特定的数据。

一旦确定了所需的内容,就可以订阅,这将返回您在管道中指定的内容。

  loadUser(user) {
    this.afs.doc<any>(`users/${user}`).snapshotChanges().pipe(
      map(actions => {
        console.log('Getting image reference from user');
        const imageRef = actions.payload.get('appPhotoRef');
        console.log(imageRef);
        return imageRef;
      })
      ).subscribe((data) => {
      console.log('Getting download URL');
      console.log(data);
      return this.getDownloadURL(data);
    });
  }