firebase Firestore强制创建祖先文档

66bbxpm5  于 2023-03-03  发布在  其他
关注(0)|答案(1)|浏览(104)

我正在创建一个firestore文档,它不在现有集合的根级别,而是更深一层:

const response = await addDoc(
    collection(
      firestore,
      'stats',    //collection
      'dayStats', //document
      'years',    //collection
      '2023',     //document
     'january',  //collection
    ),
      statData
  );

在创建时,整个集合结构还不存在,而只是其中的一部分(stats/dayStats/years)。
最终发生的事情是统计文档成功地创建在正确的位置,但不是中间文档。他们是斜体,并有一个警告说:"这个文档不存在,它将不会出现在查询或快照"。
我想这意味着我需要明确强制创建这些中间文档?是否有某种配置可以传递给函数,如果中间文档不存在,它将在路径中创建中间文档?或者我需要在每次创建一个文档时手动执行此操作,它有一个可能不存在的祖先文档?

6kkfgxo0

6kkfgxo01#

中间文档是斜体的,并且有一个警告说“此文档不存在,它不会出现在查询或快照中”。我想这意味着我需要明确强制创建这些中间文档?
实际上,中间父文档并不存在,如果您想在这些文档中存储一些数据,则需要创建它们**。另一方面,如果您不需要在中间文档中存储任何数据,则不需要创建它们,因为子子集合的存在根本不需要它们。
是否有某种类型的配置我可以传递给函数,这将只是创建路径中的中间文档,如果他们还不存在?
没有
每当我创建一个具有可能不存在的祖先文档的文档时,是否需要手动执行此操作?
是的,您需要在代码中创建父文档**,如果您想在这些文档中存储一些数据**。最好使用批处理写入,以确保父文档和子文档都是通过原子操作创建的。
例如:

import { writeBatch, doc } from "firebase/firestore";

const batch = writeBatch(firestore);

const ref1 = doc(firestore, "stats", "dayStats");
batch.set(ref1, {...});

const ref2 = doc(ref1, "years", "2023");
batch.set(ref2, {...});

const ref3 = doc(ref2, "january"); // DocID will be auto-generated
batch.set(ref3, statData);

await batch.commit();

相关问题