我的文档需要一个整数值,该整数值用作查询的索引。每个文档都包含一个索引字段(数字),在这里我要逐个手动分配值。也许我可以在某个地方放一些东西来存储当前索引值,然后递增它,并在创建新文档时将其作为索引值分配给新文档。
答案 0 :(得分:0)
Cloud Firestore中没有此类功能。您将需要自己提出所有价值观。 Firestore可以自动为您生成的唯一内容是基于服务器时间感的时间戳。
答案 1 :(得分:0)
我可以想到两种方法来处理此问题,尽管我不知道您想对文档ID使用基于整数的索引。如果删除一个,则索引现在关闭。那写失败呢?比赛条件?等等。您可能需要重新考虑您的数据结构和组织。
// Create a reference to a new document inside your collection
const ref = firebase.firestore().collection('myCollectionName').doc()
// Now you have an auto-generated document id you can use for your code
const myData = {...}
const setDoc = await firebase.firestore().collection('myCollectionName').doc(ref.id).set(myData)
您需要一个单独的集合/对象来跟踪最新索引,以免发生冲突。然后,您需要增加该值以获得下一个索引,然后将其用作您的ID。这会带来一些固有的问题,例如...尝试输入数据时如果数据不正确该怎么办,但是在增加值之后...等等。
// Collection: myIndex
// Doc: index
// Value: {lastIndex: 1}
const doc = await firebase.firestore().collection('myIndex').doc('index')
// You now have the last index value using:
const lastIndex = doc.val().lastIndex
const nextIndex = lastIndex + 1
const myData = {...}
// Now run a batched operation to write to both documents
const batch = firebase.firestore().batch()
// Update the index document
const indexUpdateRef = firebase.firestore().collection('myIndex').doc('index')
batch.update(indexUpdateRef, {lastIndex: nextIndex})
// Add your new myData document
const newDataRef = firebase.firestore().collection('myCollectionName').doc(nextIndex)
batch.set(newDataRef, myData)
// Commit the batch
await batch.commit()
正如我所说-我认为这确实是一个错误的主意和工作流程,但这是可行的。保持同步也有很多不足。
您可以利用FieldValue.increment()
来帮助自动增加您的整数值,但这将增加更多的读写操作,更长的处理时间以及所有这些费用。这就是为什么我从头开始并坚持认为,如果您想自动增加索引,则应该重新考虑数据结构或考虑使用RDB。