我正在尝试使用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;
});
}));
}
示例:如果我要获取有关单个用户的信息;我可以不用订阅吗?
答案 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);
});
}