我正在尝试将两个文档添加到两个不同的集合中。
说coll1和coll2。
我向coll1添加一个文档=>我得到了我想将其设置为coll2文档的文档id,我可以简单地编写两个add,但是我试图在事务中完成这些操作,因此如果一个失败都失败了。
我无法使用this link
完成该操作下面是我拥有的代码,需要将其转换为翻译/批处理:
await db.runTransaction(
async function (transaction) {
const coll1 = {
text: 'This is collection 1 text',
}
const coll1Doc = await db
.collection('coll1')
.add(coll1)
// I tried transaction.set(db.collection('coll1').doc(), coll1) but this doesn't return the doc or the docId which we need in the next step.
// Similay batch.set is also not returning the newly added/edited doc or its Id.
if (coll1Doc && coll1Doc.id) {
const coll1Id = coll1Doc.id
const coll2 = {
text: 'This is collection 2 text',
}
await db
.collection('coll2')
.doc(coll1Id)
.set(coll2)
}
}
)
答案 0 :(得分:1)
Firestore文档ID在您的应用程序代码中生成,并且在统计上保证是唯一的。因此,您的add()
呼叫实际上采取了以下两个步骤:
DocumentReference
DocumentReference
中设置数据有了这些知识,您就可以根据获得的ID自己构建DocumentReference
,而无需使用交易对象。
const coll1Doc = db
.collection('coll1')
.doc();
const id1 = coll1Doc.id;
await coll1Doc.set(coll1);
现在您可以在第二次写操作中使用id1
。