是否可以搜索包含文档的未知集合,该文档具有诸如电子邮件之类的标识字段?
我的结构是这样的:
每个用户都基于唯一的ID获得自己的收藏集。每个集合包含一个用户文档和一个帐户文档。用户文档包含有关我要搜索的用户的信息。帐户文档包含我要在用户之间转移资金的银行帐户的集合。
我的问题是,我不希望用户键入唯一的长ID来输入集合,而是希望键入集合\用户文档中的用户电子邮件。电子邮件是唯一的。
我刚刚为我的项目构建了不好的结构,还是可以做些什么?
更新
感谢Alex和Frank的反馈。
我继续并将结构更改为如下所示:
/users/$uid/accounts/$accountid
。
做了java Query collectionReference = db.collection("users").whereEqualTo("uEmail", userEmail);
并将document.getId()
保存为String userId
。
然后,我在UserId
中使用spinner
,以使用户能够从userId
帐户集中选择一个帐户。
答案 0 :(得分:2)
是否可以搜索包含文档的未知集合,该文档具有诸如电子邮件之类的标识字段?
否,您应该知道您收藏的名称,以便能够在参考中使用它。 Cloud Firestore集合/文档的路径中没有否通配符。您必须通过它们的特定ID来识别每个集合和每个文档。
答案 1 :(得分:2)
正如Alex所说,除非您知道集合名称,否则无法从集合(使用客户端SDK)加载数据。
但是在这种情况下,您的集合似乎是以用户的UID命名的。
这意味着,如果用户已登录,则可以通过以下方式了解他们的收藏集:
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
CollectionReference userCollection = FirebaseFirestore.getInstance().collection(uid);
一些注意事项:
users
集合一起存储,然后为该文件下的每个用户存储一个文档,然后在该子目录下的下存储其他数据的子集合。 >。例如:/users/$uid/accounts/$accountid
。listCollections
method in the Node.js SDK。但是,这些SDK仅可在受信任的环境中使用,例如开发机器,您控制的服务器或Cloud Functions,而不能直接在客户端上使用。即使使用此SDK,您也必须迭代集合列表并依次检查每个集合,因为如前所述:您只能从知道名称的集合中读取数据。getUserByEmail
in the Admin SDKs。