android - 如何在 Android 上使用 whereArrayContains() 过滤器查询包含 Firestore 集合中对象数组的文档?
问题描述
我在 firestore 中有一个集合,其中每个文档都包含一组联系人,我想查询那些联系人的电子邮件 ID 为特定值的文档。
我在https://firebase.google.com/docs/reference/android/com/google/firebase/firestore/Query#whereArrayContains(java.lang.String,%20java.lang.Object)遇到 whereArrayContains() 过滤器,带有以下描述:-
public Query whereArrayContains (String field, Object value)
创建并返回一个带有附加过滤器的新查询,该过滤器文档必须包含指定的字段,值必须是一个数组,并且该数组必须包含提供的值。一个查询只能有一个 whereArrayContains() 过滤器。
上述方法中的可以value
指向对象数组的对象内的字段吗?
此外,考虑到方法参数也称为 ,该短语the value must be an array
有点令人困惑value
。我确信文档意味着field
应该存在于文档中,并且它的值应该是一个数组,并且该数组应该包含value
参数。
解决方案
您不能在 Firestore 查询中查询数组中对象的字段。包含数组的查询将改为与数组中的对象进行比较。
该值必须是一个数组
这是指您尝试查询的字段的值。更好的措辞是
创建并返回一个带有附加过滤器的新查询,该过滤器文档必须包含指定的字段,指定字段的值必须是一个数组,并且该数组必须包含提供的值。
如果您尝试过滤用户 ID 或类似内容,请考虑将第二个数组添加到您正在查询的对象,然后将 ID 作为字符串添加到该数组:
{
"name": "test",
"users": [someUserObject, someOtherUserObject],
"userIds": ["someId", "someOtherId"]
}
然后查询该数组:
someRef.whereArrayContains("userIds", someId);
推荐阅读
- python - Python如何将capnproto转换为json?
- shopware - 使用 FTP 更改某些商店软件主题文件不会影响网站
- javascript - 无法理解错误“td-dialog”不是已知元素
- sql - SQL 用前一个非 NULL 行填充 NULL 行
- javascript - 用于在 Log Work 中编写工作描述的 Jira Tampermonkey 脚本
- c# - AutoMapper:更新现有集合
- python - 如何从kafka删除较旧的消息而不是最近的消息
- javascript - 如何使用 Angular 使用 ngx-countdown 启动和停止倒数计时器
- java - 仅更新嵌入数据而不更新所有内容。方法实现的问题
- javascript - ExtJS:MessageBox 不阻止上传