Firestoreのフィールドにどうしても.を使いたい

Firebaseのフィールド、例えばマップのキーにメールアドレスを使いたいパターンはよくあると思う。例えばこういうの。

permissions: {
  "iseebi@example.com": "read",
  "admin@example.com": "admin"
}

で、これをクエリしようとすると permissions.iseebi@example.com のようになってしまうのだが、このままだとwhereのキーに入れることができない。

// NG
firestore.collection("items")
    .where("permissions.iseebi@example.com", "in", ["read", "write", "admin"])

なんとかエスケープできないか、というのも試したけど、うまくいかず。

このような場合は、FieldPathを使うと良い。

// OK
firestore.collection("items")
    .where(new firebase.firestore.FieldPath(
        "permissions", "iseebi@example.com"), "in", ["read", "write", "admin"])

ただ、そもそもこういうのはベストプラクティスに反するので、避けた方が良い。

参考:

stackoverflow.com