firebase - 如何在firestore中查询嵌套对象
问题描述
我想以以下格式存储数据:
{
"chatName": "Football",
"chatMembers":
[
{
"userId": "nSWnbKwL6GW9fqIQKREZENTdVyq2",
"name": "Niklas"
},
{
"userId": "V3QONGrVegQBnnINYHzXtnG1kXu1",
"name": "Timo"
},
]
}
我的目标是获取所有聊天,其中带有 a 的登录用户userId
在chatMembers
列表中。如果已userId
登录用户的 不在chatMembers
属性中,则应忽略该聊天。这可能吗?
如果这是不可能的,我如何通过子集合实现这一点?
我的开发语言是 dart,但你也可以发布其他语言的解决方案。
我目前的尝试是这样,但这不起作用:
_firestore.collection(collectionName).where("chatMembers.userId", isEqualTo: userId).snapshots()
解决方案
自 2018 年 8 月以来,新的array_contains
运算符允许基于数组值进行过滤。文档在这里:https ://firebase.google.com/docs/firestore/query-data/queries#array_membership
它适用于字符串数组。但是,我认为不可能查询存储在数组中的对象的特定属性。一种解决方法是查询整个 object,如下(在 Javascript 中)。当然,这可能并非在所有情况下都可行....
var db = firebase.firestore();
var query = db.collection('chatDocs').where("chatMembers", "array-contains", { userId: "xyz", userName: "abc" });
推荐阅读
- elasticsearch - ElasticSearch - 嵌套在过滤器中的 script_score 不会影响分数 - 为什么?
- typo3 - TYPO3 TCA 如何设置页面最大标题长度
- json - 如何为嵌套列表中的奇数列表项着色?
- jquery - 使用 jquery 解析嵌入在 div 中的 div
- javascript - Pumpify 在节点 8 和节点 10 中的行为不同
- javascript - 伦敦邮政编码的正则表达式模式不匹配
- python - 在 0.05 附近四舍五入,从结果中删除一位数
- c# - 如何在 C# 中处理队列中未发送的消息
- sed - sed:如何替换特定字符串
- java - 64 位 Windows 机器中 32 位 JVM 的最大堆大小是多少?