Javascript 在firestore查询中实现或-Firebase firestore
我正在尝试在firestore查询中实现逻辑OR运算符Javascript 在firestore查询中实现或-Firebase firestore,javascript,firebase,google-cloud-firestore,Javascript,Firebase,Google Cloud Firestore,我正在尝试在firestore查询中实现逻辑OR运算符 db.collection('users').where('company_id', '==', companyId) .where('role', '==', 'Maker') .where('role', '==', 'Checker') .where('role', '==', '
db.collection('users').where('company_id', '==', companyId)
.where('role', '==', 'Maker')
.where('role', '==', 'Checker')
.where('role', '==', 'Approver')
.get().then(function(adminsSnapshot){
//Some processing on dataSnapshot
})
但这并不是实施或改进的正确方式
我希望所有用户都具有“制造者、检查者或批准者”角色
我将如何实现或在firestore中执行查询?文档中没有任何内容。编辑(2019年11月)
Cloud Firestore现在支持“IN”查询(),它允许您执行一种类型的OR查询,以查找在同一字段上有几个值之一的文档
例如,对于上面的查询:
db.collection('users')
.where('company_id', '==', companyId)
.where('role', 'in', ['Maker', 'Checker', 'Approver']);
原始答案 云Firestore中没有“或”查询。如果要在单个查询中实现这一点,则需要一个字段,如
maker\u或\u checker\u或\u approver:true
当然,您始终可以执行三个查询,并在客户端上连接它们。您可以使用rxjs组合观测值,请参见下面的角度(6)示例
orQuery(){
const $one = this.afs.collection("users", ref => ref.where("company_id","==","companyId")).valueChanges();
const $two = this.afs.collection("users", ref => ref.where("role","==","Maker")).valueChanges();
return combineLatest($one,$two).pipe(
map(([one, two]) => [...one, ...two])
)
}
getOr(){
this.orQuery().subscribe(data => console.log(data))
}
Firestore中新增了对
中的和数组包含任何运算符的支持,允许在一次查询中查询最多10个值,从而实现了这一点
因此,使用您的示例,查询将如下所示
db.collection('users'))
.where('company_id','=',companyId)
。其中('role','in',['Maker','Checker','Approver']);
在上述示例中,如果您的数据存储在数组中,请将中的替换为数组中包含的任何。默认角色是什么?两年后,现在可以这样做。见我的最新答案。我提出3个问题。这就是我正在做的。是的,如果我有类似推特的东西,我只想看到我关注的人的推特,我不能说推特。where(user==约翰或丽莎或朱莉娅)
?大家好。节点SDK是否有任何更新?在多个字段上进行多个查询似乎仍然是一种低效的过滤方式!您可以在此处跟踪或功能的进度:我正在尝试使用您的查询,但在“为函数查询提供了”中得到错误“无效值”。其中()是其第二个参数。可接受的值:,数组包含”。请帮助我如何解决此错误您正在使用的客户端库中可能尚未实现此错误。最后我检查了一下,它只在最新版本的NodeJS和pythonsdk中实现。随着时间的推移,它可能会扩展到更多的客户端库。或者const combinedList=combinelatetest(fooPosts,barPosts)。pipe(map(arr=>arr.reduce((acc,cur)=>acc.concat(cur)))
如何使用查询游标分页数据并在多个字段上实现或?