【问题标题】:Firestore adding Data to Doc in orderFirestore按顺序将数据添加到Doc
【发布时间】:2021-05-07 09:55:26
【问题描述】:

我想使用向现有文档添加元素的云功能。我遇到的困难是文档上的元素应该按一个值排序。

示例: 文档:

  • ...,安娜:12,卡塔琳娜:22,马库斯:23,...

新元素(乔希:18)

文档:

  • ...,安娜:12 岁,乔什:18 岁,卡塔琳娜:22 岁,马库斯:23 岁,...

我已经尝试过使用数组,但是每次我想添加一些东西时,我都必须覆盖文档的整个数据。

【问题讨论】:

  • 您能否再解释一下您的数据库结构是什么样的?也许在添加元素之前和之后添加一个示例。它应该如何表现以及现在如何表现。

标签: javascript firebase google-cloud-firestore google-cloud-functions


【解决方案1】:

使用对象映射并不能保证项目的顺序,数组也不能。 要更新数组中的项目,您必须删除旧值并添加新值,其中字符串值也可以根据需要替换为对象。

请注意,这确实会影响您在 Firestore 文档中的键名限制,因此,我建议以一致的结构对数据进行字符串化。

var washingtonRef = db.collection("cities").doc("DC");

// Atomically add a new region to the "regions" array field.
washingtonRef.update({
    regions: firebase.firestore.FieldValue.arrayUnion("greater_virginia")
});

// Atomically remove a region from the "regions" array field.
washingtonRef.update({
    regions: firebase.firestore.FieldValue.arrayRemove("east_coast")
});

至于顺序,不能保证项目会按顺序排列,这种排序纯粹是对数据库的修饰,您必须决定如何对其进行排序。这可以通过毫秒时间戳或其他增量方式来完成。

【讨论】:

  • 感谢您的回答。但我仍然看到一个问题。在我的情况下,文档不会经常更新,但是会有很多读取,我想优化这个文档中的搜索。如果我在每次更新文档的情况下都添加整个数组,则应该以我上传数组的方式保证顺序?
  • 无法保证,这就是为什么您需要在值中使用时间戳以便您可以在客户端上订购。默认情况下,大多数值也在 firebase 控制台中按字母数字排序,实际顺序与数据库无关。
  • 您从哪里得到订单不保证的信息?在这篇文章link 他们说不同。
  • 它并不像“它在添加元素时保持元素的顺序”那么简单,如果您阅读特定的措辞,它会按对象的第一个元素然后长度对其进行排序,这可能是名称,年龄等,因此 - 不能保证它的顺序对您有用。这就是为什么我建议添加时间戳作为一种索引来维护特定顺序的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-07
  • 1970-01-01
  • 2022-01-05
  • 1970-01-01
相关资源
最近更新 更多