Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firestore查询-数组包含所有_Javascript_Firebase_Google Cloud Firestore - Fatal编程技术网

Javascript Firestore查询-数组包含所有

Javascript Firestore查询-数组包含所有,javascript,firebase,google-cloud-firestore,Javascript,Firebase,Google Cloud Firestore,我的用例涉及使用“array contains all”过滤Firestore文档,我为此问题编造了这些文档的名称。但是,“array contains any”已存在,但它不会检查数组中是否存在所有元素,而是检查是否存在任何元素。我努力寻找内置解决方案或找到更好的方法来实现相同的结果,而不是查询所有文档(代价高昂),然后在最终数组传递给客户端之前在云函数中过滤结果 举个例子,我们想知道哪些住宿地点有我们感兴趣并希望查询的以下所有设施: [ 'lockable_bedroom_door'

我的用例涉及使用“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限制和用户可能选择的设施数量,如何实现这一目标?

只要您像现在这样使用列表类型字段,就不会有一种查询效率高的方法。如果将数据复制到一个新的映射类型字段中,就可以了

facilities: {
    'kettle': true
    'microwave': true
    'cooker': true
}
使用此包含已知布尔值的映射,可以进行如下查询:

firestore
    .collection("your-collection")
    .where("facilities.kettle", "==", true)
    .where("facilities.microwave", "==", true)
    .where("facilities.cooker", "==", true)

谢谢你的回答,道格!您知道在单个查询中使用“==”运算符的where查询的数量是否有任何限制吗?我想,用户可能希望在每个住宿中包括10多个设施。如果不是,那将是一个完美的解决方案,需要你在上面概述的细微变化。系统的所有限制都记录在案。如果你没有看到它,那么就没有已知的极限。