【问题标题】:Is there an advantage of using .add() instead of .set() when creating a doc that holds its own docId?在创建包含自己的 docId 的文档时,使用 .add() 而不是 .set() 是否有优势?
【发布时间】:2021-05-17 20:58:27
【问题描述】:

可以使用.add().set() 在 Firestore 中创建文档。对于这个特定的问题,我们假设文档包含一个具有自己 docId 的属性。

使用.add() 和以下.set() 更新方法:

db.collection("cities").add({
  docId: null,
  name: 'Tokyo',
  country: 'Japan'
});

//... get docId of inserted document via DocumentReference Promise return of add()

//update with docId
db.collection("cities").doc(docId).set(city, {merge: true});

只使用set():

const newCityRef = db.collection('cities').doc();
// Later...
const res = await newCityRef.set({
  // ...
});

当我想存储一个拥有自己的 docId 的文档时,使用 .add() 有什么特别的优势吗?另外,总是使用.set() 创建新文档有什么特别的缺点吗?

使用第二种方法时,.doc() 是否总是返回唯一且未使用的 ID?使用第一种方法总是会导致两次写入操作,而仅使用.set() 只需要一次。

【问题讨论】:

  • 这能回答你的问题吗? Firestore: difference between set() and add()
  • 对不起,我不知道为什么这个问题被标记为重复,只有标题与提供的帖子相同。我知道这两种方法之间的区别,我只想知道将 documentId 存储在字段中时的最佳方法(或最佳实践)是什么。此外,如果 .doc() 始终提供唯一 ID,这也不能回答?
  • @hfontanez 这个问题似乎与问题的意图并不重复,并且提出的确切问题肯定是不同的。没有检查其他重复项,但肯定不是上述问题的重复项。

标签: javascript angular firebase google-cloud-firestore angularfire2


【解决方案1】:

当我想存储一个拥有自己的 docId 的文档时,使用 .add() 有什么特别的好处吗?另外,总是使用 .set() 创建新文档有什么特别的缺点吗?

我相信您已经通过您发布的以下有效评估回答了这部分问题:

使用第一种方法总是会导致两个写入操作,而仅使用 .set() 只需要一个。

这意味着在计费方面,您发出的写入次数越多,您支付的费用就越多,因为根据实例的位置按每 100,000 个文档的写入次数计费。现在,在实现方面,following section of the docs 揭示了幕后方法本身没有特别的区别:

在幕后,.add(...) 和 .doc().set(...) 是完全等价的,所以你可以使用哪个更方便。

因此,我相信对于您的特定用例,使用 doc() set() 方法可能是最好的方法(避免由于写入次数而增加计费)。

使用第二种方法时,.doc() 是否总是返回唯一且未使用的 ID?

使用 .doc() 必然会创建一个具有自动生成标识符的空文档,该标识符是唯一的,如 doc() method 的参考所建议的那样。

【讨论】:

  • 非常感谢!你知道.doc()“reservers”id 一段时间吗?假设我的目标是在一个进程中异步创建数千个文档,是否有可能获得重复?我知道由于它的长度等原因,这不太可能,但我只是从理论上的角度想知道。
  • 嗨 Tobias,介绍了问题的异步性质,我不确定在某些时候 id 是否会发生冲突。我不相信这会是一个问题,但还没有在生产中测试过这样的场景。
  • 根据此处提供的答案:stackoverflow.com/questions/66282712/… 似乎几乎不可能得到重复项,因为 id 是在客户端生成的。
猜你喜欢
  • 1970-01-01
  • 2011-08-08
  • 1970-01-01
  • 1970-01-01
  • 2012-12-11
  • 2015-08-15
  • 1970-01-01
  • 2017-05-08
  • 1970-01-01
相关资源
最近更新 更多