2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

FirebaseAdvent Calendar 2022

Day 19

firestoreでmapを使ったフィールドにarrayUnionする方法

Posted at

こんにちは。virapture株式会社でCEOしながらラグナロク株式会社でもCKOとして働いている@mogmetです。

本日はfirestoreのtips投稿になります。

Map型のフィールド内にある配列に値を追加したい!

そんな要望ありませんか?私はありました。
たとえばチャットの未読を管理するためにchatRoomドキュメントのunreadMapフィールドに下記のようなデータを保管していたとします。

"unreadMap": {
  "userIdA": [
    "chatIdA"
  ],
  "userIdB": [
    "chatIdB"
  ]
}

ここにuserIdAの配列にchatIdCを追加しようとこう書くとします。

firestore.collection('chatRooms').doc('chatRoomIdA').update({
  unreadMap: {
    userIdA: admin.firestore.FieldValue.arrayUnion('chatIdC')
  }
})

そうすると何が起こるかというと、userIdAの値しか残らなくなります!

"unreadMap": {
  "userIdA": [
    "chatIdC"
  ],
}

しかも前にあった値も上書きされて全然arrayUnionじゃないです。ただのupdate。

解決法

答えは下記で解説されていました。

mapの奥の値までkeyを指定すればよかったみたいです。

firestore.collection('chatRooms').doc('chatRoomIdA').update({
  'unreadMap.userIdA': admin.firestore.FieldValue.arrayUnion('chatIdC')
})

これで無事arrayUnionできました。

まとめ

mapを使うときは.を使ったキーの指定でupdateしていきましょう。

最後に、ワンナイト人狼オンラインというゲームを作ってます!よかったら遊んでね!

他にもCameconOffcha、問い合わせ対応が簡単にできるCSmart、フリーランスのコミュニティのNextFreelanceといったサービスも作ってるのでよかったら使ってね!

また、チームビルディングや技術顧問、Firebaseの設計やアドバイスといったお話も受け付けてますので御用の方は弊社までお問い合わせください。

ラグナロクでもエンジニアやデザイナーのメンバーを募集しています!!楽しくぶち上げたい人はぜひお話ししましょう!!

2
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?