【问题标题】:Listen to the changes in subcollection监听子集合的变化
【发布时间】:2020-05-18 17:14:19
【问题描述】:

我想知道是否有可能订阅整个文档集合,如果balanceRecords 内的任何子节点(甚至像completness.energy 内的2020.2.1 值这样深层嵌套)更改侦听器触发器

我试过了:

FirebaseDb.collection(`users`).doc(uid).collection(`balanceRecords`)
  .onSnapshot({ includeMetadataChanges: true }, function (snapshot) {
    debugger
    // during initialisation snapshot:
    // docs.length = 0 
    // empty: true
})

如果有有效的方法来侦听文档子集合的字段,请您对集合的后续更新不会触发任何侦听器?

【问题讨论】:

  • 您附加的侦听器应针对uid 标识的用户的balanceRecords 子集合下的任何更改触发。如果您没有发生这种情况,请更新您的问题以显示您如何更改该文档。如果您可以在 jsbin 之类的网站上设置问题的重现,这可能也会有所帮助,以便我们查看。
  • @FrankvanPuffelen 不幸的是,从提供的屏幕截图来看,他们没有 balanceRecords 子集合。他们在文档中有一个 balanceRecords 字段。
  • 啊,明白了!这确实是不可能的,除非 OP 将余额放在另一个子集合中。

标签: javascript firebase google-cloud-firestore


【解决方案1】:

您提供的屏幕截图显示了一个没有子集合的文档。该文档有一个名为“balanceRecords”的可见字段,其中包含一个看起来很复杂的对象。由于它不是子集合,您可以使用您编写的代码引用它。

如果您想读取该字段,则必须读取命名文档。如果您想监听该字段中的更改,则必须在该单个文档上设置快照监听器。快照侦听器不会准确告诉您该字段发生了什么变化 - 您必须将其与之前的快照进行比较才能找出答案。

FirebaseDb.collection('users').doc(uid).onSnapshot(snapshot -> {
    // read the balanceRecords field out of the document here.
})

【讨论】:

  • 感谢 Doug 的建议,这确实有效,但它返回 DocumentReference,据我了解,这并不能看到 .docChanges() 的实际变化,所以我想知道这是否可能以某种方式订阅有可能看到更改:-)
  • 正如我在回答中所说,SDK 没有提供。您必须编写代码来比较之前的快照和新的快照,看看是否有任何字段发生了变化。
  • 我明白了,从弗兰克的评论看来,如果屏幕截图是 2020 年的字段,则有可能收听文档集合的子集合。这确实有可能吗? :)
  • 您必须完全重构您的数据才能使用子集合。
  • 我不知道你的应用的需求是什么,所以我建议你尝试一下,满足你自己的需求,如果你有问题在这里再发一个新的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-30
  • 1970-01-01
  • 2021-03-06
  • 2020-10-27
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多