Firebase 我如何在Firestore文档中自动生成值?

Firebase 我如何在Firestore文档中自动生成值?,firebase,google-cloud-firestore,Firebase,Google Cloud Firestore,我的文档需要一个整数值,该数值用作查询的索引。每个文档都包含一个索引字段(编号),我在其中逐个手动分配值。也许我可以在某个地方放一些东西,存储当前索引值并递增,然后在创建新文档时将其作为索引值分配给新文档 云Firestore中没有这样的功能。你需要自己提出所有的价值观。Firestore唯一能自动为您生成的是基于服务器时间感的时间戳。我可以想出两种方法来处理这个问题,尽管我不知道您是否希望对文档id使用基于整数的索引。如果您删除一个,您的索引现在已关闭。那么写失败呢?比赛条件?等等。您可能需要

我的文档需要一个整数值,该数值用作查询的索引。每个文档都包含一个索引字段(编号),我在其中逐个手动分配值。也许我可以在某个地方放一些东西,存储当前索引值并递增,然后在创建新文档时将其作为索引值分配给新文档

云Firestore中没有这样的功能。你需要自己提出所有的价值观。Firestore唯一能自动为您生成的是基于服务器时间感的时间戳。

我可以想出两种方法来处理这个问题,尽管我不知道您是否希望对文档id使用基于整数的索引。如果您删除一个,您的索引现在已关闭。那么写失败呢?比赛条件?等等。您可能需要重新考虑您的数据结构和组织

如果不需要使用整数作为文档id:
//在集合中创建对新文档的引用
const ref=firebase.firestore().collection('myCollectionName').doc()
//现在您有了一个自动生成的文档id,可以用于代码
常量myData={…}
const setDoc=wait firebase.firestore().collection('myCollectionName').doc(ref.id).set(myData)
如果需要使用整数: 您需要一个单独的集合/对象来跟踪最新的索引,这样您就不会遇到冲突。然后,您将希望增加该值以获得下一个索引,然后将其用作您的id。这会带来一些固有的问题,例如……如果在您尝试输入数据时数据不好,但在您增加该值之后……会怎样

//集合:myIndex
//文件:索引
//值:{lastIndex:1}
const doc=wait firebase.firestore().collection('myIndex').doc('index'))
//现在,您可以使用以下命令获得最后一个索引值:
const lastIndex=doc.val().lastIndex
常量nextIndex=lastIndex+1
常量myData={…}
//现在运行批处理操作以写入这两个文档
const batch=firebase.firestore().batch()
//更新索引文档
const indexUpdateRef=firebase.firestore().collection('myIndex').doc('index'))
update(indexUpdateRef,{lastIndex:nextIndex})
//添加新的myData文档
const newDataRef=firebase.firestore().collection('myCollectionName').doc(nextIndex)
batch.set(newDataRef,myData)
//提交批处理
等待批处理。提交()
正如我所说,我认为这是一个非常糟糕的想法和工作流程,但它是可行的。保持同步也会丢失很多信息

在上述任何一种情况下。。。 您可以利用
FieldValue.increment()
帮助自动递增整数值,但这将增加更多的读写操作、更长的处理时间和更高的费用。这就是为什么我开始和维护你应该重新思考你的数据结构或考虑一个RDB如果你想要自动递增索引。