javascript - 我可以获得从 Firestore 集合组查询中获取的文档的路径或引用吗?

标签 javascript typescript firebase google-cloud-firestore

所以我想像这样执行集合组查询,以获取收件箱中所有过期的消息文档

const oneMonthAgo = moment().subtract(1, "month").toDate();

db.collectionGroup("inbox")
.where("createdAt", "<", oneMonthAgo)
.get();

inbox实际上是users集合中的一个子集合,所以路径是这样的:

users/{userID}/inbox/{messageID}

在我使用上面的集合组查询代码获取所有过期消息后,我需要删除所有这些过期消息。要删除消息文档,我需要知道文档的路径/引用

我可以从消息文档中的字段中获取 messageID。但我不知道用户 ID,所以我不知道删除该消息的完整路径/引用

users/ ?????? /inbox/{messageID}

那么我是否可以仅从上面的集合组查询代码的结果中获取用户ID?因为我需要使用这段代码删除消息文档

db.doc(`users/${??????}/inbox/${messageID}`).delete()

上面的代码将返回 FirebaseFirestore.DocumentData 的 promise 。我需要获取从集合组查询中获取的文档的路径或引用。

我可以这样做吗?

最佳答案

给定一个消息文档,您可以通过沿着其引用的 parent 链向上走来确定用户:

const messages = await db.collectionGroup("inbox")
  .where("createdAt", "<", oneMonthAgo)
  .get();
messages.forEach((messageSnapshot) => {
  const messageRef = messageSnapshot.ref;
  const inboxRef = messageRef.parent;
  const userRef = inboxRef.parent;
  console.log(userRef.id); // logs the id of the user document this message is for
});

另见 How to return parent collection based on subcollection document value in Firestore?

关于javascript - 我可以获得从 Firestore 集合组查询中获取的文档的路径或引用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66760873/

相关文章:

javascript - 如何对齐复选框并选择?

Typescript:如何扩展嵌套字段的接口(interface)并向对象赋值?

angular - 如何将 header 添加到我的 Angular 发布请求中?

javascript - 返回 JSON 对象的简单 XMLHttpRequest 函数

javascript - 为什么在我向 DOM 添加不相关的 div 后 JQuery UI Datepicker 停止工作?

php - 拉推特头像

typescript - 定义接口(interface) : object with unknown number and name of properties

firebase - firebase 中的 merge 和 timestampsInSnapshot 是什么?

javascript - 如何修复 Node 中未定义错误的 "Cannot read property ' trim'

android - FCM 推送通知 : MismatchSenderId