Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在创建保存自己docId的文档时,使用.add()而不是.set()是否有优势?_Javascript_Angular_Firebase_Google Cloud Firestore_Angularfire2 - Fatal编程技术网

Javascript 在创建保存自己docId的文档时,使用.add()而不是.set()是否有优势?

Javascript 在创建保存自己docId的文档时,使用.add()而不是.set()是否有优势?,javascript,angular,firebase,google-cloud-firestore,angularfire2,Javascript,Angular,Firebase,Google Cloud Firestore,Angularfire2,可以使用.add()或.set()在Firestore中创建文档。对于这个特殊的问题,让我们假设文档拥有一个具有自己docId的属性 使用.add()和以下.set()更新接近: db.collection("cities").add({ docId: null, name: 'Tokyo', country: 'Japan' }); //... get docId of inserted document via DocumentReference Promi

可以使用
.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()
接近:

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

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

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

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

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

这意味着在计费方面,您发出的写操作越多,您的计费就越多,因为您的计费取决于实例的位置,即每100000个文档中的写操作数。现在,从实现角度来看,这些方法本身在幕后并没有什么特别的区别:

在幕后,.add(…)和.doc().set(…)完全等效,因此您可以使用更方便的选项

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

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


使用.doc()必然会创建一个空文档,其中包含一个自动生成的标识符,该标识符是唯一的,正如引用中所建议的那样。

这是否回答了您的问题?对不起,我不知道为什么这个问题被标记为重复,只有标题与提供的帖子相同。我知道这两种方法之间的区别,我只是想知道在字段中存储documentId时,什么是最佳方法(或最佳实践)。此外,如果.doc()始终提供唯一的ID,则这一点也不成立?@hfontanez问题似乎不是重复的问题,问题的意图和提出的确切问题完全不同。没有检查其他副本,但它肯定不是上述问题的副本。非常感谢!您知道
.doc()
是否会将id“保留”一段时间吗?假设我的目标是在一个进程中异步创建数千个文档,那么有可能获得重复的文档吗?我知道这不太可能,因为它的长度等等,但我只是从理论的角度考虑。嗨,Tobias,介绍了这个问题的异步性质,我不确定在某个时候ids是否会发生冲突。我不认为这会成为一个问题,但还没有在生产中测试过这种情况。根据这里提供的答案:由于id是在客户端生成的,所以几乎不可能获得重复的id。
const newCityRef = db.collection('cities').doc();
// Later...
const res = await newCityRef.set({
  // ...
});