我目前正在改进我的代码,我有一个关于查询类型查询的问题。其中一些对象有一个名为endd_at的字段,而其他对象则没有。我无法使用where(' endd_at ', isEqualTo: null),因为endd_at字段是在创建对象后创建的。有没有一种方法可以在调用snapshot()之前过滤掉没有endd_at字段的对象?我希望能够只检索没有endd_at字段的对象,以避免错误。
我试过使用contains方法,但这只在调用snapshot()后有效,我试图避免这种情况以提高性能。我也不确定如何使用hasField()或containsKey()而不调用snapshot()。我正在寻找一个不涉及使用where()的解决方案,因为字段endd_at可能存在,也可能不存在于查询的对象中。
如果您只想获得具有ended_at
字段的文档,无论该字段具有什么值,您都可以在查询中使用where("ended_at", isGreaterThanOrEqualTo: null)
条件。
这个不包括没有ended_at
字段的文档,因为索引中不存在这些文档,但是包括所有具有该字段的文档(无论其值如何),因为null
是所有排序中的第一个值,如关于值排序的文档所示。