我使用Flutter和Firestore。假设我的数据库如下所示:
[
{
Name: 'John',
Address: {
Street: "John doe street"
Postal: "12047"
}
},
{
Name: 'Mary',
Address: {
Street: "Fleet street"
Postal: "1242B"
}
}
]
现在我想搜索所有邮政编码包含“12”的人。因此,这将意味着在这个虚拟数据库中的两个记录。
但是如何筛选嵌套字段“Address.Postal”呢?
var ref = FirebaseFirestore.instance;
var query = '12';
ref.collection('users')
.where(
'Address.Postal', // Won't work
... // There is no 'like' operator or something that looks alike
);
仅供参考,Flutter中的项目无关紧要。
2条答案
按热度按时间lymnna711#
没有办法检查数组项中的特定属性。你所能做的就是检查整个项是否存在于
array-contains
中。但要做到这一点,你需要知道整个数组项,也就是所有的名称和地址属性。如果你只有名字,没有内置的操作符来测试数组项是否包含这个名字,你只需要把名字提取到自己的数组中(比如
addressNames
),然后对它使用array-contains
。icomxhvb2#
where()
函数现在接受FieldPath
示例作为第一个参数。这允许您在查询中引用嵌套字段或documentId()
。示例:
至于SQL LIKE语句的Firestore等效语句this answer explains it better,简单地说,可以使用
>=
和<=
运算符按字符值查询string
字段。\uf8ff
(Private-Use Area)只是此操作常用的分隔符,因为: