如何向云 Firestore 中的对象添加新属性 [重复]

Posted

技术标签:

【中文标题】如何向云 Firestore 中的对象添加新属性 [重复]【英文标题】:How to add new property to an object in cloud firestore [duplicate] 【发布时间】:2020-05-05 02:26:11 【问题描述】:

我想将新的Property 添加到Object 中已存在的Cloud Firestore

/*
After Update 1, my Expectation:
  MyObject = 
     'NewProperty1': 'newValue1'
  
*/
db.collection('users').doc(id).update(
  MyObject: 'NewProperty1': 'newValue1'
);


/*
After Update 2, my Expectation:
  MyObject = 
     'NewProperty1': 'newValue1',
     'NewProperty2': 'newValue2',
  
*/
db.collection('users').doc(id).update(
  MyObject: 'NewProperty2': 'newValue2'
);

/*
After Update 3, my Expectation:
  MyObject = 
     'NewProperty1': 'newValue1',
     'NewProperty2': 'newValue2',
     'NewProperty3': 'newValue3',
  
*/
db.collection('users').doc(id).update(
  MyObject: 'NewProperty3': 'newValue3'
);

如您所见,我只是将新属性添加到一个对象。

现在这段代码每次都用旧属性覆盖新属性。

【问题讨论】:

【参考方案1】:

以下应该可以解决问题

db.collection('users').doc(id).update(
  'MyObject.NewProperty1': 'newValue1'
);

联系doc了解更多详情。


如果属性名称是动态的(请参阅下面的 cmets),您可以执行以下操作:

  var key = 'NewPropertyX';
  var value = 'propertyX';


  db.collection('users').doc(id).update(
    [`MyObject.$key`]: value
  );

【讨论】:

谢谢,但该属性是动态的,例如在每次更新中都有随机 id,我使用该 id 作为具有 true 或 false 值的属性。 动态的具体部分是什么? MyObject 还是 NewProperty1? MyObject 一直存在,是一个Object,可以有很多属性,如NewProperty1、NewProperty2、NewProperty3、NewPropertyX。那么如何将新的 property1、property2 和 propertyX ... 添加到 MyObject 中,这是我的 users 集合和 user doc 的字段。 查看更新。 很高兴能帮到你!您将在doc 中找到有关 Firestore 限制的更多详细信息。在您的情况下,我认为以下可能适用:字段值的最大大小:1 MiB - 89 字节(1,048,487 字节);地图或数组中的最大景深:20【参考方案2】:
use set method

    db.collection('users').doc(id).set(
     'NewProperty2': 'newValue2',
    );

设置不合并将覆盖文档或创建它 还不存在

设置合并将更新文档中的字段或创建它,如果它 不存在

update 将更新字段,但如果文档不存在则会失败

create 将创建文档,但如果文档已经创建则失败 存在

看到这个答案:https://***.com/a/46600599/1680793

【讨论】:

set() 函数覆盖,而且我只需要在MyObject 中添加。

以上是关于如何向云 Firestore 中的对象添加新属性 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何更新firestore中数组内的对象? [复制]

如何在 firestore 中的现有数组中添加或删除项目?

如何通过敲除映射(ko.utils)向数组中的每个对象添加新属性(索引)?

如何从 Python 运行时云函数访问 Google Cloud Platform Firestore 触发器

Firestore,检测添加到集合中的新文档等

将新属性添加到另一个数组中的现有对象数组