我使用Firebase Firestore为Android存储数据。我试图从文档中搜索数据。
我的Firestore结构是:
集合(产品) - 文档(自动生成的ID) - 字段(NumberOfPeople,OfferStartDate,OfferEndDate,OfferPrice,Location)
我为这些字段的搜索数据编写了查询。
CollectionReference collectionOfProducts = db.collection("Products);
collectionOfProducts
.whereEqualTo("Location", location)
.whereGreaterThanOrEqualTo("OfferPrice", offerPrice)
.whereLessThanOrEqualTo("OfferPrice", offerPrice)
.whereGreaterThanOrEqualTo("OfferStartDate", date)
.whereLessThanOrEqualTo("OfferEndDate", date)
.get()
我想要这样的搜索结果:在开始日期和结束日期之间的报价,其中报价价格大于等于或小于等于给定价格范围。这个查询在android studio中不起作用。
如何在firestore firebase中执行此操作?
答案 0 :(得分:1)
据我所知,Firestore只允许您使用< Greater / Less> ThanOrEqualTo()和< Greater / Less> Than()a single field以及其他字段上的所有其他过滤操作是whereEqualTo()。
针对您的具体案例的一些解决方法包括 -
1)将您的查询修改为
collectionOfProducts
.whereGreaterThanOrEqualTo("OfferStartDate", date)
.whereEqualTo("Location", location)
.get()
然后对您的应用代码中的结果执行后续过滤。
或者,您可以在查询中对“OfferPrice”和“Location”执行过滤,其余过滤器可以应用于查询结果。
2)您可以使用firebase functions或其他服务器代码编写执行自定义过滤的逻辑并以此方式获取结果。
答案 1 :(得分:1)
您编写的查询与以下内容相同:
collectionOfProducts
.whereEqualTo("Location", location)
.whereEqualTo("OfferPrice", offerPrice)
.whereEqualTo("OfferStartDate", date)
.get()
注意,当您在使用whereLessThanOrEqualTo
的同一查询中使用whereGreaterThanOrEqualTo
时,仅使用whereEqualTo
时的逻辑相同,并且根据official documentation,您被允许可以链接多个whereEqualTo
方法。
您需要记住的另一件事是,当您基于多个属性(使用复合查询)查询数据库时,请确保创建自定义index。