【问题标题】:How to update firebase with array of objects?如何使用对象数组更新firebase?
【发布时间】:2018-07-03 21:27:51
【问题描述】:

例如,我们有数据库:

//the database
firebase: {
  1: a,
  2: b,
  3: c
}

//the ref 
var firebaseRef = firebase.database().ref();

//what we need
var change = [
  {
    id: 2,
    value: "y"
  },
  {
    id: 3,
    value: "z"
  },
];

//a possible way how we want
firebaseRef.update({
  change[0].id: change[0].value,
  change[1].id: change[1].value
})

我有几个问题。

最后一个块需要遍历数组。但我不知道重复调用更新是否是一个好习惯。

第二个重要的事情是,虽然上面的键只有一个值,但这很好,但如果它是一个有几个属性的对象,我们想要设置的唯一一个将覆盖其他属性。我认为解决此问题的最佳方法是创建一个循环,将数据库的子项设置为数组的实际对象的 id 或键,然后更新必要的属性。

但是循环遍历一个数组并重复调用更新函数不是一个坏习惯吗?

【问题讨论】:

  • 我在您发布的代码中看不到任何循环。您的问题/问题到底是什么。另请注意,询问最佳/不良做法可能会被视为题外话,因为它会征求意见。
  • 问题就是问题。如何使用对象数组更新数据库。上面你可以看到我的想法。我想知道的是哪种方法最好。
  • 这是一个完美的例子,说明为什么不在 NoSQL 数据库中使用数组。它们的使用是高度情境化的,通常有更好的方法来存储和组织数据。请参阅此较早的帖子Arrays are Evil 和此question。通常不鼓励在紧密循环中重复调用更新,但真正的问题是尝试使用 Firebase 中的数组来执行此操作。创建父/子节点来存储该数据。

标签: javascript firebase firebase-realtime-database


【解决方案1】:

重复调用update() 函数并没有什么坏处。对数据库的所有请求都通过一个连接进行,因此每次调用的开销很小。

但您可能希望对原子性进行一次更新:确保允许所有写入,或者不允许任何写入。

这是一种方法,通过循环遍历 JavaScript 中的更改:

var changes = [
  {
    id: 2,
    value: "y"
  },
  {
    id: 3,
    value: "z"
  },
];
var updates = {};
changes.forEach((change) => {
  updates[change.id] = change.value;
});
ref.update(updates);

【讨论】:

    猜你喜欢
    • 2021-02-02
    • 1970-01-01
    • 2019-09-14
    • 1970-01-01
    • 2021-07-08
    • 2021-04-29
    • 1970-01-01
    相关资源
    最近更新 更多