能否将相同文档以相同ID写入Firebase的两个不同集合
解答
可以实现两个集合下的文档ID完全一致。
你当前代码生成ID不同的原因是:调用add()方法写入文档时,Firestore会自动为每次写入生成随机的唯一文档ID,两次调用add()自然会得到两个不同的ID。要固定ID,你需要使用doc(自定义ID).set()的写法手动指定文档ID写入。
具体实现思路
- 第一次写入
users集合后,拿到自动生成的文档ID - 第二次写入
users__2集合时,直接复用刚才拿到的ID作为新文档的ID - 如果需要子集合
favFood下的文档ID也相同,也用同样的逻辑复用ID即可
修改后的示例代码
// 先写入users集合,用add自动生成ID db.collection("users").add({ name: "userName", lastName: "userLastName" }) .then(userDocRef => { // 拿到生成的用户文档ID,后续写入复用这个ID const sharedUserId = userDocRef.id; // 写入users下的子集合favFood return userDocRef.collection("favFood").add({ favDrink: "userDrink", favDessert: "userDesert", }).then(favDocRef => { // 拿到favFood文档的ID,如果需要子集合ID也相同就复用这个ID const sharedFavId = favDocRef.id; // 写入users__2集合,手动指定ID为刚才拿到的sharedUserId return db.collection("users__2").doc(sharedUserId).set({ name: "userName", lastName: "userLastName" }).then(() => { // 写入users__2下的favFood子集合,复用fav的ID保证一致 return db.collection("users__2").doc(sharedUserId) .collection("favFood").doc(sharedFavId).set({ favDrink: "userDrink", favDessert: "userDesert", }) }) }) }) .catch(error => { console.error("写入出错:", error); });
额外说明
- 如果你不想用Firestore自动生成的ID,也可以自己指定自定义ID(比如用用户手机号、唯一业务编号等),直接传入
doc()方法即可 - 注意补全Promise链的返回,避免出现异步操作顺序混乱、没有捕获异常的问题
内容的提问来源于stack exchange,提问作者Minenhle Solson Cele
相关产品推荐
相关产品推荐

