【问题标题】:Firestore create document if it doesn't exist, and listen to it如果它不存在,Firestore 创建文档,并收听它
【发布时间】:2020-05-10 19:24:23
【问题描述】:

我正在为 Firestore 使用 Firebase 网络客户端。我有一个值id,它要么是集合中文档的 ID,要么是 undefined。我想创建一个具有由 Firestore 生成的 id 的文档(当 id 未定义时),或者如果 id 已定义,则获取该文档,然后监听该文档的更改。我想留下一个函数unsubscribe,我可以调用它来分离监听器。像这样的:

let unsubscribe;
if (recipeId) {
  unsubscribe = db
    .collection("mycollection")
    .doc(id)
    .onSnapshot(doc => myFunction(doc));
} else {
  unsubscribe = db
    .collection("mycollection")
    .doc()
    .add()
    .then(docRef =>
      db
        .collection("mycollection")
        .doc(docRef.id)
        .onSnapshot(doc => myFunction(doc))
    );
}

【问题讨论】:

  • 我不太确定您要做什么。听起来你有两个不同的问题。首先,存在创建文档的问题。其次,是倾听变化的问题。这些问题并没有真正重叠。您无法通过聆听来创建文档。您可以使用 set() 或 add() 创建新文档。
  • 是的,我知道如何分别做每件事,但我不知道如何将它们串在一起。我添加了一个扩展示例来说明我是如何挣扎的。我认为我的问题主要只是一般的 javascript 问题。

标签: javascript firebase google-cloud-firestore


【解决方案1】:

添加具有随机 ID 的新文档:

  const promise = db
    .collection("mycollection")
    .add({})

add() 返回一个带有 DocumentReference 的承诺。然后你就可以听了。

  promise.then((ref) => ref.onSnapshot(...))

【讨论】:

  • 谢谢,下面是我实现这个的方法,但我得到了Uncaught FirebaseError: Function CollectionReference.add() requires 1 argument, but was called with 0 arguments.const unsubscribe = id ? db .collection("mycollection") .doc(id) .onSnapshot(doc => console.log(doc, doc.data())) : db .collection("mycollection") .add() .then(docRef => docRef.onSnapshot(doc => console.log(doc, doc.data())));
  • 好的,如果您没有要设置的初始内容,请传递一个空对象,如我的编辑所示。
猜你喜欢
  • 2016-03-17
  • 2019-02-16
  • 2014-07-20
  • 2013-12-07
  • 1970-01-01
  • 1970-01-01
  • 2013-11-05
  • 2020-07-12
  • 2014-11-09
相关资源
最近更新 更多