我正在查看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));
有人知道如何实现这一目标吗?
答案 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);
});
答案 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
数组中搜索一个数字,所以可以很好地工作。
如果需要查询所有这些数字,则应执行三个单独的查询,并将结果客户端组合在一起。