我正在尝试执行一个不起作用的查询:
Query<Map<String, dynamic>> reference =
firebaseFirestore.collection(path);
reference = reference.where('userId', isNotEqualTo: userId);
reference = reference.where('timestamp', isGreaterThan: lastReadTime);
将两者结合起来是行不通的。
我也尝试过:
Query<Map<String, dynamic>> reference =
firebaseFirestore.collection(path);
reference = reference.where('userId', isNotEqualTo: userId).where('timestamp', isGreaterThan: lastReadTime);
debugPrint("reference : ${reference.parameters}");
结果相同。 后面的参数不被考虑,如下日志所示。
reference : {where: [[FieldPath([userId]), !=, vxwe1qMIUkVa...]], orderBy: [], startAt: null, startAfter: null, endAt: null, endBefore: null, limit: null, limitToLast: null}
如您所见,
timestamp
缺少打印的参数。
查询的结果也不是我所期望的,因为 timestamp
被忽略了。
我对
userId
和 timestamp
有一个综合索引。
我想通了。基本上现在不可能,范围和不等于比较必须在同一字段上进行,如文档中所述。
In a compound query, range (<, <=, >, >=) and not equals (!=, not-in) comparisons must all filter on the same field.