我有一个函数,可以使用where
和get
从Firestore提取数据。问题是,如果添加了新记录,则不会将其实时推送到客户端。我知道我必须使用.valueChanges()
,但是我还需要在.where()
条件下获取数据,因为我无法获取全部数据
我只需要获取logged in user
的数据。这就是为什么需要where
条件的原因。
如何将两者同时使用?
这是我当前的代码:
assign_by(){
this.goalList =[];
this.storage.get('loggedInUser').then((val) => {
console.log('Your user ID is', val);
this.loggedInusr = val;
firebase.firestore().collection(`todos`)
//.where("assignTo", "==", this.loggedInusr)
.where("assignBy", "==", this.loggedInusr)
//.where("followers", "array-contains", this.loggedInusr)
.get()
//.valueChanges()
.then(querySnapshot => {
querySnapshot.forEach(doc=> {
// doc.data() is never undefined for query doc snapshots
console.log("assignby");
console.log(doc.id, " ===> ", doc.data());
this.goalList.push(doc.data());
});
});
});
}
按照指导,我已将当前代码更改如下:
assign_to(){
this.goalList =[];
this.storage.get('loggedInUser').then((val) => {
console.log('Your user ID is', val);
this.loggedInusr = val;
firebase.firestore().collection(`todos`)
.where("assignTo", "==", this.loggedInusr)
.onSnapshot(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
console.log(doc.data());
console.log("assignby");
console.log(doc.id, " ===> ", doc.data());
this.goalList.push(doc.data());
});
});
});
}
已登录用户添加了新记录,因此应该在该屏幕上看到新记录,该屏幕显示了该用户分配的所有记录。
我添加了此记录:
但此处未更新:
如上图所示,显示assign_by()
功能来自此功能。请注意,如果我再次打开此页面,则可以看到新记录。
assign_by(){
this.goalList =[];
this.storage.get('loggedInUser').then((val) => {
console.log('Your user ID is', val);
this.loggedInusr = val;
firebase.firestore().collection(`todos`)
//.where("assignTo", "==", this.loggedInusr)
.where("assignBy", "==", this.loggedInusr)
// .get()
// .then(querySnapshot => {
.onSnapshot(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
console.log(doc.data());
console.log("assignby");
console.log(doc.id, " ===> ", doc.data());
this.goalList.push(doc.data());
});
});
// querySnapshot.forEach(doc=> {
// // doc.data() is never undefined for query doc snapshots
// console.log("assignby");
// console.log(doc.id, " ===> ", doc.data());
// this.goalList.push(doc.data());
// });
// });
});
}
答案 0 :(得分:2)
您可以很好地在onSnapshot()
上调用Query
方法,如下所示:
firebase.firestore().collection('todos')
.where("assignBy", "==", this.loggedInusr)
.onSnapshot(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
console.log(doc.data());
});
});
通过执行firebase.firestore().collection('todos').where("assignBy", "==", this.loggedInusr).get()
,您实际上仅查询数据库一次,因此,您无法检测到集合中是否有任何更改(例如,添加的记录)(与您的查询相对应)在此初始且唯一提取之后。请参见get()
方法文档here。