如何使用android的多个文档字段在Firestore中搜索?

如何使用android的多个文档字段在Firestore中搜索?,android,firebase,google-cloud-firestore,Android,Firebase,Google Cloud Firestore,我正在使用Firebase Firestore for android来存储数据。我试图从文档中搜索数据 我的Firestore结构是: 集合(产品)-文档(自动生成的ID)-字段(人数、OfferStartDate、OfferDate、OfferPrice、位置) 我编写了这些字段的搜索数据查询 CollectionReference collectionOfProducts = db.collection("Products); collectionOfProducts

我正在使用Firebase Firestore for android来存储数据。我试图从文档中搜索数据

我的Firestore结构是:

集合(产品)-文档(自动生成的ID)-字段(人数、OfferStartDate、OfferDate、OfferPrice、位置)

我编写了这些字段的搜索数据查询

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中执行此操作?

据我所知,firestore仅允许您使用whereThanOrEqualTo()和whereThan()以及其他字段上的所有其他筛选操作只能使用whereEqualTo()

针对您的具体案例的一些变通方法包括:

1) 将查询修改为

collectionOfProducts
                    .whereGreaterThanOrEqualTo("OfferStartDate", date)
                    .whereEqualTo("Location", location)
                    .get() 
然后对应用程序代码中的结果执行后续过滤

或者,您可以对查询中的“OfferPrice”和“Location”执行筛选,其余的筛选可以应用于查询结果


2) 您可以使用或其他服务器代码编写执行自定义筛选的逻辑,并以这种方式获取结果。

根据有关Cloud Firestore查询的官方文档,请注意:

在复合查询中,范围(=)和不等于(!=,不在)比较必须在同一字段上过滤

因此,包含对这两种方法的调用的查询对象:

.whereGreaterThanOrEqualTo("OfferStartDate", date)
.whereLessThanOrEqualTo("OfferEndDate", date)
实际上是不可能的,因为“OfferStartDate”和“OfferEndDate”是不同的属性

我能想到的最好的解决方案是只使用这些方法调用中的一个,而在客户机上执行另一个过滤

另一种可能的解决方案可能是使用非规范化和复制数据
每隔一定的时间。这样,您将始终知道时间段,并能够创建相应的查询。

您的问题的解决方案是什么,我也有同样的问题!我正在使用firestore。在这种情况下,我们如何使用where条件——获取所有聊天对话,其中“(senderid==loggedinuserid和receiverid==10)或(senderid==10和receiverid==loggedinuserid)”?请建议。谢谢。我在用firestore。在这种情况下,我们如何使用where条件——获取所有聊天对话,其中“(senderid==loggedinuserid和receiverid==10)或(senderid==10和receiverid==loggedinuserid)”?请建议。谢谢。正如在另一篇文章中提到的,@Kamlesh在一个查询中使用多个
=
调用一点问题都没有。我们都知道在查询中可以使用多个.where(),但是如何使用or条件和2-2 where条件呢?你明白我说的了吗。请建议。谢谢