Firestore WriteBatch.commit() で特定の FieldValue を含むデータと件数制限について
500レコード以下でも件数制限に引っかかる時がある。
Firebase Firestore のトランザクション書き込みには最大500レコードまでしか同時に書き込めません (執筆時時点。
500レコードをこえるデータを書き込もうとすると、
maximum 500 writes allowed per request
というエラーが返されます。
一方 500 レコード以下の書き込みでも、上記のエラーになることがあります。
serverTimestamp
、arrayUnion
、 increment
などのフィールド変換のデータを含むときです。
理由
ドキュメントに書いてある
https://firebase.google.com/docs/firestore/manage-data/transactions?hl=ja#batched-writes
つまり、serverTimestamp
、arrayUnion
、 increment
などのフィールド変換は 1件 として計上されるので、
たとえば、
{
updatedAt: admin.firestore.FieldValue.serverTimestamp()
title: 'foor'
}
みたいなデータの書き込みは 2レコードの書き込みとして計上されてしまいます。
同様のデータを251件書き込もうとするとエラーになってしまうわけです。
まとめ
ドキュメントにもあるので、知らなかったお前が悪いというのはそのとおりなんですが、、、、
壮大にハマったので誰かのためになればいいなと思い書いときます。
https://github.com/firebase/firebase-admin-node/issues/456#issuecomment-464187898
にもあるとおり、中の人も 「ごめん、むりだ。その代わりドキュメントに書いとくYO」 といっているので、バグではなく仕様ですね。
Author And Source
この問題について(Firestore WriteBatch.commit() で特定の FieldValue を含むデータと件数制限について), 我々は、より多くの情報をここで見つけました https://qiita.com/studio-kakky/items/ca7085c634e87ee728c1著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .