Firebase 'array-contains-any' 10 多个元素



我在Firestore集合中的文档上存储了一个数组字段,我需要能够提取每个文档,其中数组字段包含几个选项中的一个。我只需要每次匹配一次,所以如果数组字段包含选项中的多个项目,我仍然只需要返回该文档的一份副本。目前我正在构建这样的查询:

query = collection.WhereArrayContainsAny('array-field', [1,2,3,4,...]);

我遇到的问题是,所提供的选项数组超过10项,因此查询失败。我可以将选项数组拆分为10个元素数组,并多次运行查询,但我担心这会使查询需要很长时间才能执行,而且速度很重要。有没有办法绕过过去对人们有效的10项限制?

您可以并行运行多个查询调用,并将结果组合在一个列表中:

using System;
using System.Collections.Generic;
using System.Net.NetworkInformation;
using System.Threading;
using System.Threading.Tasks;
public class Example
{
public static void Main()
{
int failed = 0;
var tasks = new List<Task<QuerySnapshot>>();
String[] filters = {1,2,3,4,5};

foreach (var value in filters) {

tasks.Add(Task.Run( async () => { 

try {
Query query = collection.WhereArrayContainsAny('array-field', [value]);
QuerySnapshot querySnapshot = await museums.GetSnapshotAsync();
return querySnapshot;

}
catch (Exception) {
// handle exception
throw;
}
})
);
}
var continuation = Task.WhenAll(tasks);
try {
continuation.Wait();
}
catch (AggregateException)
{ }

if (continuation.Status == TaskStatus.RanToCompletion) {
List<QuerySnapshot> queries = new List<QuerySnapshot>()

foreach (var result in continuation.Result) {
foreach (DocumentSnapshot document in result.Documents){
queries.add(document);
}     
}

}
// Display information on faulted tasks.
else {
foreach (var t in tasks) {
Console.WriteLine("Task {0}: {1}", t.Id, t.Status);
}
}      
}
}

最新更新