关于这个问题的更新
Firestore 推出了另一个类似于 in 查询的功能,即 array-contains-any 查询。此功能允许您同时对多个值执行包含数组的查询。
使用 array-contains-any 运算符将同一字段上的最多 10 个 array-contains 子句与逻辑 OR 组合在一起。array-contains-any 查询返回给定字段是包含一个或多个比较值的数组的文档:
ref = ref.where('node_sku' , 'array-contains-any' , list);
问题
我正在尝试where()
使用array-contains
运算符通过多种方法过滤数据,但是出现以下错误:
An error occured: Error: 3 INVALID_ARGUMENT:
A maximum of 1 'ARRAY_CONTAINS' filter is allowed.
基本上,我有一个包含以下文档的集合:
product1
- node_sku ['sku1', 'sku2', 'sku3' ]
product2
- node_sku ['sku4', 'sku5', 'sku6' ]
然后我的数组包含我希望在数据库中找到的项目:
const list = ['sku4', 'sku2']
我想搜索sku4
and sku2
,如果找到任何返回对象。
我的问题是array-contains
不允许运行多次。
这是我用来过滤的代码:
const list = ['sku4', 'sku2'];
let database = firestore_db.collection('glasses');
let ref = database;
list.forEach( (val) => {
ref = ref.where('node_sku' , 'array-contains' , val);
});
ref.get()
.then( (snapshot) => glassesRequestComplete(snapshot, req, response))
.catch( (error) => glassesRequestError(error, response) );
正如您所注意到的,我的问题是我正在遍历我的list
数组,但是我ref
抛出了一个错误,因为我不止一次触发“数组包含”。
我还尝试与数组进行比较:
ref.where('node_sku' , 'array-contains' , list);
它不返回 any ,我相信 array-contains 不与数组进行比较,可能只有字符串/数字/布尔值?
有人知道解决方案而不必单独查询吗?
谢谢