如何链接 .where 以进行 firebase 查询
How to chain .where for firebase query
我的应用程序允许用户定义后端字段(多个),然后使用 'rules' 将它们链接(通过循环)到集合中的 return 相关文档。
let eeRef = this.afStore.collection<any>(`.../Collections/EmpSnapshot`).ref
let eeDoc: any = null
if (u.bAccessAll) {
eeDoc = eeRef
} else {
for (let r of u.rules) {
eeDoc = eeRef.where(r.field, r.condition, r.value)
}
}
await eeDoc.get()
.then(res => {
for (let ee of res.docs) {
emails.push(ee.id)
}
}).catch(err => {
console.log(`Error query-ing 'EmpSnapshot': `, err)
})
但实际上,eeDoc 变量只能识别循环中的最后一个条件,而不能将所有条件链接起来。例如,如果我的规则是
- 全职(员工)
- 财务(部门)
我希望 return 所有全职财务人员,但我的代码只会 return 'Finance' 员工
如何修复我的代码以链接 .where 条件?
您将在循环的每次迭代中覆盖 eeDoc
。
这应该更接近你想要的:
let eeDoc: any = eeRef
if (u1.bAccessAll) {
for (let r of u.rules) {
eeDoc = eeDoc.where(r.field, r.condition, r.value)
}
}
我的应用程序允许用户定义后端字段(多个),然后使用 'rules' 将它们链接(通过循环)到集合中的 return 相关文档。
let eeRef = this.afStore.collection<any>(`.../Collections/EmpSnapshot`).ref
let eeDoc: any = null
if (u.bAccessAll) {
eeDoc = eeRef
} else {
for (let r of u.rules) {
eeDoc = eeRef.where(r.field, r.condition, r.value)
}
}
await eeDoc.get()
.then(res => {
for (let ee of res.docs) {
emails.push(ee.id)
}
}).catch(err => {
console.log(`Error query-ing 'EmpSnapshot': `, err)
})
但实际上,eeDoc 变量只能识别循环中的最后一个条件,而不能将所有条件链接起来。例如,如果我的规则是
- 全职(员工)
- 财务(部门)
我希望 return 所有全职财务人员,但我的代码只会 return 'Finance' 员工 如何修复我的代码以链接 .where 条件?
您将在循环的每次迭代中覆盖 eeDoc
。
这应该更接近你想要的:
let eeDoc: any = eeRef
if (u1.bAccessAll) {
for (let r of u.rules) {
eeDoc = eeDoc.where(r.field, r.condition, r.value)
}
}