数组包含查询无法正常工作

时间:2019-12-06 09:33:49

标签: javascript google-cloud-firestore

你好,我正在实现包含数组的查询,但是每次我尝试获取空白快照时。我的代码是:

getStation = () => {
  const query = firebase
     .firestore()
     .collection('routes')
     .where('station', 'array-contains', 'station_name ');

  query.get().then(snapshot => {
      console.log("snapshot", snapshot);

      snapshot.docs.forEach(doc => {
        alert("eri")
        console.log("eryh", doc.data);
      })
    })
    .catch(err => {
      console.log('Error getting documents', err);
    });

}

我什至试图传递静态值,但无法获得期望值。enter image description here

3 个答案:

答案 0 :(得分:1)

您的代码中存在拼写错误的问题,测站必须是测站

.where('station', 'array-contains', 'station_name ');

必须

 .where('stations', 'array-contains', 'station_name ');

我希望它能解决您的问题。

更新答案

station_name中也有错别字,您只是在station_name之后添加了空格

.where('station', 'array-contains', 'station_name ');

必须

.where('stations', 'array-contains', 'station_name');

答案 1 :(得分:0)

您正在尝试使用数组包含的内容来检查地图内的字段。不支持。

包含数组的对象只能搜索数组内的字段,而不能搜索该数组内的映射内的字段。

我测试过的一种解决方法是,在数组内添加一个额外的字段,该字段将为布尔值或字符串,并且您可以基于该字段进行查询。

在数组中使用布尔字段:

enter image description here

.where('stations', 'array-contains', true);

在数组中使用字符串字段:

enter image description here

.where('stations', 'array-contains', 'station_name exists');

答案 2 :(得分:0)

array-contains操作检查您指定的精确对象/值在数组中是否存在。它不能检查数组元素的子集,只能检查完整的值。因此,在当前结构中,您必须将所有属性传递到array-contains调用中:

.where('station', 'array-contains', 
  { station_address_name: '...', station_lat_long: ..., status_name: '...' });

这通常是不可行的,在这种情况下,您需要将要过滤的元素存储在文档的(附加)单独字段中。在此示例中,由于要过滤站点名称,因此将添加一个字段station_names,其中仅存储站点名称。然后您可以使用以下查询:

.where('station_names', 'array-contains', 'name to search for')

另请参阅: