Firestore查询“ array_contains”在数组中传递

时间:2019-10-16 13:57:49

标签: javascript firebase google-cloud-firestore

我正在查看Firebase,云Firestore,但不了解如何执行查询并传递数组。

const friendIds = [1, 2, 3];

Firestone.collection('conversations')
      .where('members', 'array-contains', friendIds)
      .get()
      .then(querySnapshot => console.log(querySnapshot))
      .catch(error => console.log(error));

有人知道如何实现这一目标吗?

3 个答案:

答案 0 :(得分:0)

当前无法通过单个查询进行。包含数组的对象只能在命名数组中找到一个项目。

您的替代方法是执行三个查询,对friendsId数组中的每个项目执行一个查询,然后将结果合并到代码中。

答案 1 :(得分:0)

  

不确定是否可行,但这是来自Firebase Node.js Snippets的示例,可以为您提供一个想法:

  let citiesRef = db.collection('cities');

  // [START array_contains_filter]
  let westCoastCities = citiesRef.where('regions', 'array-contains',
    'west_coast');

  // [END array_contains_filter]

  westCoastCities.get()
    .then(res => {
      console.log('West Coast get: ', res);
    });

引用Documentation

答案 2 :(得分:0)

根据有关query operators的官方文档:

  

您可以使用包含数组的运算符根据数组值进行过滤。

正如我在您的代码中看到的那样,作为第三个参数传递给friendIds函数的where()参数的类型为array。您实际上在做什么,您正在数组类型的members属性中搜索一个数组,由于我假设您的members数组,实际上不可能数据库包含数字。

这样的查询:

Firestone.collection('conversations')
      .where('members', 'array-contains', 3)
      .get()
      .then(querySnapshot => console.log(querySnapshot))
      .catch(error => console.log(error));

因为我们正在members数组中搜索一个数字,所以可以很好地工作。

如果需要查询所有这些数字,则应执行三个单独的查询,并将结果客户端组合在一起。