firebase - 如何查询 firestore 中的嵌套对象

标签 firebase dart nosql flutter google-cloud-firestore

<分区>

我想以下列格式存储数据:

{
   "chatName": "Football",
   "chatMembers":
   [
      {
         "userId": "nSWnbKwL6GW9fqIQKREZENTdVyq2",
         "name": "Niklas"
      },
      {
         "userId": "V3QONGrVegQBnnINYHzXtnG1kXu1",
         "name": "Timo"
      },
   ]
} 

我的目标是获取所有聊天,其中具有 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

它非常适用于字符串数组。但是,我认为不可能查询存储在数组中的对象的特定属性。一种解决方法是查询整个对象,如下所示(在 Javascript 中)。当然,这可能并非在所有情况下都可行......

    var db = firebase.firestore();
    var query = db.collection('chatDocs').where("chatMembers", "array-contains", { userId: "xyz", userName: "abc" });

关于firebase - 如何查询 firestore 中的嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52905836/

相关文章:

firebase - flutter 和 Firebase : type 'Query' is not a subtype of type 'CollectionReference'

database - 是否可以实时自动从 elasticsearch 中删除早于例如 10 天的数据?

java - 在 Firebase 数据库 Android Java 中写入新的整数数据

android - Firebase 云消息传递不适用于 Android 上的构建变体

Firebase - 在我的特定情况下我应该停止使用匿名身份验证吗? (另外,如何删除用户)

javascript - 无法从 Firebase 保存或获取数据(React Native 和 Firebase 的新增功能)

dart - Flutter 中的可拖动 FloatingActionButton

firebase - 如何在flutter中访问firestore的某些字段?

nosql - RavenDB - 修补非规范化引用集合

nosql - 在 Elastic Search 上查询多级嵌套字段