LoginSignup
1
0

More than 5 years have passed since last update.

Realtime Databaseでは空配列や空オブジェクトを保存できない

Last updated at Posted at 2019-01-30

概要

firebaseのRealtime Databaseでデータを保存した時に、何故かぬるぽが発生していました。

サンプルコード

データを保存したら表示する簡単なサンプルコードです。

// firebaseのconfigとかは省略

const ref = firebase.database().ref("test");

ref.on("value", snap => {
  console.log(snap.val());
});

(async () => {
  await ref.set({ i: 1, list: [1], obj: { i: 1 } });
  await ref.set({ i: 2, list: [], obj: {} });

  process.exit();
})();
{ i: 1, list: [ 1 ], obj: { i: 1 } }
{ i: 2 }

2回目のconsole.logでは、listとobjが消えてしまっています。どうもRealtime Databaseでは空配列や空オブジェクトをセットすると、プロパティが消えてしまうみたいです。

対応策

firebaseの仕様なので、クライアント側でチェックするくらいしか対応方法はなさそうです。

ref.on("value", snap => {
  console.log({ list: [], obj: {}, ...snap.val() });
});
{ list: [ 1 ], obj: { i: 1 }, i: 1 }
{ list: [], obj: {}, i: 2 }

配列に関して補足

そもそもRealtime Databaseで配列は使わない方が良さそうでした。一応、いくつかの条件を満たせば配列を使っても問題ないらしいです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0