使用 Firestore 进行多路径更新

2024-03-21

我在所有有关 Firestore 的文章中都提到,它比 Realtime Firebase 需要更少的非规范化。我想这是因为它是一个文档数据库,您可以在其中指向特定文档并仅检索该数量的数据(?)。

但是,我想知道如何管理非规范化仍然有用的情况(例如,我们可以通过在其他文档上存储相同的值来保存对包含完整信息数据的文档的查询)。如果需要更新该值,是否有类似实时 Firebase 多路径更新(更新每个文档的值)之类的东西来解决此问题?


我认为你想说的是“firestore 比实时数据库需要更少的非规范化”(两者都是负责存储数据的 Firebase 产品)”。我认为这种说法不一定正确,因为这一切都取决于数据的架构。 Firestore 强制您遵守一些良好实践,但这并不意味着您可以在实时数据库中获得类似的架构。

更新非规范化数据

您可以使用批量写入更新位于不同路径的非规范化数据。但请注意,您最多只能在一个批次中更新 500 个实体。

如果不需要读取操作集中的任何文档,则可以将多个写入操作作为包含 set()、update() 或 delete() 操作的任意组合的单个批处理来执行。一批写入以原子方式完成,并且可以写入多个文档。

示例来自Firebase Firestore 文档 https://firebase.google.com/docs/firestore/manage-data/transactions

// Get a new write batch
var batch = db.batch();

// Set the value of 'NYC'
var nycRef = db.collection("cities").doc("NYC");
batch.set(nycRef, {name: "New York City"});

// Update the population of 'SF'
var sfRef = db.collection("cities").doc("SF");
batch.update(sfRef, {"population": 1000000});

// Delete the city 'LA'
var laRef = db.collection("cities").doc("LA");
batch.delete(laRef);

// Commit the batch
batch.commit().then(function () {
    // ...
});

Note:代码可能不清楚,但在 Firestore 上不会执行任何写入操作,直到commit方法被调用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Firestore 进行多路径更新 的相关文章

随机推荐