我是 firestore 的新手,正在构建一个允许用户租用自行车的应用程序。当用户租用自行车时,他们必须在特定日期预订。 我想执行一个查询来检索尚未在特定日期预订的车辆。假设用户选择6月28日,查询结果应该是28日尚未预订的车辆。
在 firestore 中,我将预订的日期保存为数组,如下所示
所以我尝试使用它来获取不在数组中的日期,但它似乎不起作用。
List dates = [2021-08-05-25.12.00.000000];
FirebaseFirestore.instance
.collection('bicycles')
.where('bookedDates',whereNotIn: dates)
.get()
如果有任何帮助,我将不胜感激
一种可能性是调整您的数据模型。您可以为每个日期提供一个文档,其中有一个数组类型的字段,其中包含所有车辆(自行车?)ID。
每次在给定日期预订车辆时,您都会从日期文档中删除车辆 ID。您应该使用 Transaction 进行预订,这样您就可以确保更新操作(从数组中删除车辆 ID)仅使用服务器上可用的最新数据进行。
这样,就可以很容易地查询给定日期可用的车辆。
您可以使用预定的云功能启动日期文档。例如,您可以创建本月开始前六个月的该月的所有日期文档。这完全取决于您的业务案例。
这就是查询限制。您必须组合两个查询才能实现该行为,如下所示:
var s1 = FirebaseFirestore.instance
.collection('bicycles')
.where('bookedDates', isLessThan: '...28june...')
.get();
var s2 = FirebaseFirestore.instance
.collection('bicycles')
.where('bookedDates', isGreaterThan: '...28june...')
.get();
首先,
bookedDates
是一个数组。在我看来,您正在尝试执行与 array-contains
相反的操作,即获取 bookedDates
不包含 dates
中的任何值的文档。据我所知,没有这样的运营商。