【问题标题】:Remove many relationships in firebase cloud firestore删除 Firebase Cloud Firestore 中的许多关系
【发布时间】:2017-10-12 15:27:45
【问题描述】:

我执行以下批处理:

batch.set(doc, {
   "Users": {
      [userKey]: null
   }
}, { merge: true })

它为关系放置空值但不删除它。

我需要像在实时数据库中一样删除对象的字段和值,而不是保留空值。

如果我使用 firebase.firestore.FieldValue.delete() 仅适用于对象而不适用于其字段。

【问题讨论】:

  • 你试过batch.doc(docid).collection('Users').doc('userKey').delete()吗?
  • batch.doc(docid).collection('Users').doc('userKey').delete()‌​ 将删除带有Users 子集合的userKey 文档,但不会t 删除文档中的字段 FieldValue.delete() 是这样做的方法。

标签: firebase cloud google-cloud-firestore


【解决方案1】:

无论好坏,Firestore 都会将 null 值与不存在的字段区别对待,因此将值设置为 null 不会满足您的要求。

FieldValue.delete() 删除字段的方式,而不是文档,所以这个应该删除字段:

batch.set(doc, {
  "Users": {
    [userKey]: firebase.firestore.FieldValue.delete()
  }
}, { merge: true });

但是,目前已发布的 SDK 中存在一个错误,导致此功能无法按预期工作。暂时使用

batch.update(
    'Users.userKey',
    firebase.firestore.FieldValue.delete());

【讨论】:

  • 我试过这个:"[userKey]: firebase.firestore.FieldValue.delete()" 但失败表明它只适用于根字段。
  • 然后试试这个:“'Users.userKey',firebase.firestore.FieldValue.delete()” 但我不知道如何将“userKey”设置为动态值。
  • 如果您在名为 userKey 的变量中有要删除的 userKey,您只需连接:'Users.' + 用户密钥。字段路径只是字符串。
  • 这个测试也做了,但还是不行。连接时('Users.' + UserKey)不取userKey字符串,则以这种方式连接('Users.' + [UserKey])并给出错误
  • 我最终做的是加藤建议的,我将用户作为一个集合而不是一个对象。问题在于,当我想获得关系时,我必须对 firebase 进行另一个查询。
猜你喜欢
  • 2018-03-19
  • 1970-01-01
  • 2021-01-05
  • 2020-07-17
  • 2019-12-05
  • 1970-01-01
  • 2018-06-18
  • 2021-10-16
  • 1970-01-01
相关资源
最近更新 更多