我的用例涉及到使用'array-contains-all'过滤Firestore文档,我为此问题的目的而命名。然而,'array-contains-any'已经存在,但它不会检查数组中是否存在所有元素,我很难找到一个内置的解决方案或找到一个更好的方法来实现相同的结果,而不是查询所有的文档(昂贵的),然后在最终数组传递给客户端之前在云函数中过滤结果。
举个给予例子,我们想知道哪些住宿网站拥有我们感兴趣并希望查询的所有以下设施:
[
'lockable_bedroom_door',
'private_bathroom',
'internet',
'desk',
'safe_place_to_store_valuables'
]
字符串
在所有13个可用设施中:
[
'kettle',
'microwave',
'cooker',
'washing_machine',
'fully_functional_kitchen',
'lockable_bedroom_door',
'private_bathroom',
'shared_bathroom',
'internet',
'desk',
'common_room_lounge',
'safe_place_to_store_valuables',
'free_on-site_parking'
]
型
如何做到这一点,同时考虑到Firestore的限制和用户可能选择的设施数量?
2条答案
按热度按时间qvtsj1bj1#
只要你像现在这样使用列表类型字段,就不会有一种你会发现有效的查询方法。如果你将数据复制到一个新的Map类型字段中,这将是可能的。
字符串
有了这个包含已知布尔值的Map,你可以像这样查询:
型
ccrfmcuu2#
也许这能帮上忙,我为此实施了一个变通方案
字符串
保存结果到一个数组字段中,然后在查询中使用WhereArrayContains(Field,list.joinToString(“_”))。
对不起,我的英语,我只会说法语。