【问题标题】:Is it possible to add a subcollection to a collection without adding document in Firestore?是否可以将子集合添加到集合而不在 Firestore 中添加文档?
【发布时间】:2020-11-15 08:38:35
【问题描述】:

我想为类似上图的帖子创建一个数据库模型。

posts(collection) > categories(document) > c1(collection) > post_id(document) > post_data

在这种情况下,如果我对 c1 集合执行任何查询,例如 whereEqualTowhereLessThan,它工作正常。

但在另一种情况下,

posts(collection) > all(document) > post_id(collection) > post_data

在这种情况下,我想对 all 执行查询,但我不能,因为它是一个文档。

那么有什么方法可以在不添加文档的情况下将子集合添加到集合中,或者像下面这样添加虚拟文档/集合是唯一的方法吗?

posts(collection) > all(document) > xyz(collection) > post_id(document) > post_data

需要帮助:(

【问题讨论】:

  • 我们通常根据要执行的查询来构建 Firestore 数据库。这些查询是什么?
  • 查询有点类似于答案stackoverflow.com/a/46801925/8207701 的“环绕”部分。使用云功能,我会从用户的首选类别和“全部”部分获得随机帖子(一周前的限制),将其混合然后发送给客户。
  • @AlexMamo 如果我对类别和所有帖子使用不同的根集合,或者像最后提到的代码一样使用虚拟集合名称,我也可以实现我想要的。但作为一个初学者,我只想知道是否有更简洁的方法来建模它。

标签: android database firebase google-cloud-firestore nosql


【解决方案1】:

目前不可能,您只能将文档添加到集合中。 您的解决方案可能是重组您的数据库。现在看起来有点奇怪,你双重保存数据。

我建议你这样做:

POSTS:
     P1:
          category: c1
          data: somedata
     P2:
          category: c1
          data: somedata
     P3:
          category: c2
          data: somedata

之后你可以查询whereEqualTo("category", c1),你会得到c1类的所有文档。

【讨论】:

  • 我需要对“类别”和“全部”集合执行一些复杂的查询。所以使用这样的模型对我来说不是那么灵活。但在上述代码中,POSTS > ALL > P1, P2, P3“All”是一个文档。所以不可能使用 whereEqualTo("category", c1) 这样的查询,对吗?还是我错过了什么?非常感谢您的回答。
  • 你能告诉我关于复杂查询的几句话吗?你需要搜索什么?我的回答有点不正确,现在我已经修复了
猜你喜欢
  • 2019-01-01
  • 1970-01-01
  • 2020-06-28
  • 1970-01-01
  • 1970-01-01
  • 2020-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多