【问题标题】:Firestore batch deep copy or shallow copy?Firestore 批量深拷贝还是浅拷贝?
【发布时间】:2018-09-26 02:55:43
【问题描述】:

假设我有以下代码:

let ref1 = db.collection('user').doc('u1')
let ref2 = db.collection('user').doc('u2')

let batch = this.db.batch()
let obj = {foo:'bar'}
batch.set(ref1, obj);
obj.foo = 'not bar anymore'
batch.set(ref2, obj);
batch.commit();

firestore 会制作 obj 的深层副本还是浅层副本?换句话说,一旦查询运行并且我检查了我的数据库,文档'u1' 的值会变成{foo:'bar'} 还是{foo:'not bar anymore bar'}

【问题讨论】:

    标签: javascript node.js firebase google-cloud-firestore deep-copy


    【解决方案1】:

    只要只使用面向外部的 API,DocumentReference 对象就完全不可变(永远不会改变)。他们真正做的只是指向 Firestore 中的一个文档位置。在批处理上调用 set() 不会更改传递给它的引用。

    当然,您可以尝试访问 DocumentReference 来直接修改它,因为 JavaScript 允许这样的事情,但这不是 API 的支持使用。

    【讨论】:

    • 感谢您提供有关 DocumentReference 的信息。也许我的问题不清楚,但我真正要问的是:如果我将一个对象作为 batch.set 的第二个参数传递,那么存储在批处理中的值是否会改变,然后我会改变这个对象的属性。我编辑问题以获得更多说明。
    • 我不确定,但它似乎应该很容易测试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 2013-08-23
    • 1970-01-01
    相关资源
    最近更新 更多