【问题标题】:Firestore do not merge specific map fieldFirestore 不合并特定的地图字段
【发布时间】:2021-06-23 09:56:45
【问题描述】:

我有一个PUT: /users 端点,它接受多个字段。 在大多数情况下,我只想在带有{merge: true} 的文档上调用.set,以便能够更新单个文档字段而无需删除其他字段。但在另一种情况下,我将更新地图以使其中只有一个值。

例如:

// user doc
displayName: 'Frank'
age: 28
gender: {
  male: true
}
orientation: {
  female: true
}

displayNameage 可以合并,但是当涉及到 genderorientation 时,我想用新的地图完全替换地图。我知道我可以拥有gender: 'male' 的属性,但这不允许可扩展的查询,因为我正在构建一个约会应用程序并且需要有一个尽可能灵活的查询库。

现在说我要打电话给...doc.set({ gender: {female: true} }, {merge: true}); 我的文档结构如下所示:

displayName: 'Frank'
age: 28
gender: {
  male: true,
  female: true,
}
orientation: {
  female: true
}

但理想情况下,它会完全替换 gender 地图。即

displayName: 'Frank'
age: 28
gender: {
  female: true
}
orientation: {
  female: true
}

有人有这方面的经验吗?同样,我想将此结构保留为 Map,以便我可以运行类似的查询

db
  .collection('users')
  .where(`gender.${myOrientation}`, '==', true)
  .where('gender.all', '==', true) <-- for non-gender-specific users

我也知道 array 结构,但 firestore-queries 仅限于每个查询 1 个数组查询。

谢谢!

【问题讨论】:

    标签: database firebase google-cloud-firestore nosql


    【解决方案1】:

    使用更新而不是合并设置不是更好吗? 使用这个:

          var userDoc = db.collection('users').doc(docId);
          userDoc.update({ gender: {female: true} });
    

    你会得到你需要的确切结果。

    Here 有一个 Stack Overflow 线程解释了在 Cloud Firestore 中使用 update 或 set with merge 之间的区别。在一个答案中,还有一个关于合并的示例:嵌套字段中的真实行为。

    【讨论】:

      猜你喜欢
      • 2019-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-14
      • 2021-07-20
      • 2018-05-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多