Firestore:使用文档ID与ID作为字段

时间:2019-12-26 04:29:14

标签: ios firebase google-cloud-firestore

我已经好奇了很长时间,但是建议在Firestore中的文档中保存一个 id 字段吗?因为我们已经在firestore中拥有唯一的documentId存储了?

此外,当使用电子邮件对用户进行身份验证时,结果将返回 uid ,并且在在线教程中,该结果另存为用户文档中的字段。我很困惑为什么要这样做,因为我们已经有了用户的documentId。

3 个答案:

答案 0 :(得分:1)

仅当文档ID满足您要使用该ID进行的查询时,才需要将其存储在文档中。在我看到的绝大多数时间中,根本不需要存储ID,或者充其量只是为了方便。

我唯一能想到的是该ID在文档中必须包含的位置是,如果您在收集组查询期间正在查找具有特定ID的文档。由于这些类型的查询只能将普通字段值视为过滤器,因此您需要文档中的ID才能满足该查询。否则,这是不可能的(您不能在集合组查询中使用特殊的FieldPath.documentId()令牌)。

如果您使用某种形式的序列化技术将文档字段根据其名称自动映射到某些对象属性,则在文档中放入文档ID会很方便。大多数对象映射器都不知道如何找到文档ID,因为它通常不会最终出现在原始文档数据中的字段映射中。但是在Android上,实际上现在可以使用相对较新的@DocumentId批注以及Firestore内置的POJO对象映射器。

我不知道本教程试图通过将文档ID放在字段中来实际实现什么,但这实际上不是必需的。你应该问作者为什么。

答案 1 :(得分:0)

我也不知道在文档本身中存储文档ID是否也是可取的,而且我也从未亲自这样做。话虽这么说,这样做是很普遍的,而且几乎无害。重复ID时通常是为了方便起见,因为从那时起,所有信息都已经存在于文档数据中。如前所述:我认为这没有什么大不了,但这只是个人喜好。

答案 2 :(得分:0)

道格和弗兰克提供的答案可能会回答您的问题。

我最近一直在开发一个应用程序,但不确定应该使用哪种方法,而是根据“键”字段或基于文档ID本身进行查询。

看起来,即使“关键”字段方法可能是逻辑方法,当数据库变大时,直接使用文档ID也会更快。这很有意义,因为您不必每次都搜索所有文档。

因此,我的建议是,除非您的用例绝对需要,否则请尝试避免基于具有文档ID的字段进行搜索,因为这会随着数据库的增长而减慢速度。