代码之家  ›  专栏  ›  技术社区  ›  Javier Tan

建议如何在firebase中存储需要限制字符的字段?

  •  0
  • Javier Tan  · 技术社区  · 1 年前

    我目前正在开发一款使用Firestore的卡路里追踪应用程序。

    我用Firestore把食物储存在一份文件中。但是,其中一些食品包含字段路径中不允许使用的限制字符(“~”、“*”、“/”、“[”或“]”)。

    例如,这个 map 里面有食物。注意限制字符的使用。

    有没有推荐的方法来处理限制字符的使用?我正在考虑在更新Firestore之前对字符串进行编码和解码,并在获取文档时对其进行解码,方法是用特定的字符串替换所有受限制的字符。

    感谢您的帮助!非常感谢。

    2 回复  |  直到 1 年前
        1
  •  1
  •   Veer Pratap    1 年前

    编码

    var encodeFirebaseKey = function(key) {
        return encodeURIComponent(key).replace(/\./g, '%2E');
    };
    
    // Examples
    console.log(encodeFirebaseKey('[email protected]')); // "Henry%2EMorgan%40caribbean%2Esea"
    console.log(encodeFirebaseKey('02/10/2013')); // "02%2F10%2F2013"
    

    解码

    var decodeFirebaseKey = function(encodedKey) {
        return decodeURIComponent(encodedKey.replace(/%2E/g, '.'));
    };
    
    // Examples
    console.log(decodeFirebaseKey('Henry%2EMorgan%40caribbean%2Esea')); // "[email protected]"
    console.log(decodeFirebaseKey('02%2F10%2F2013')); // "02/10/2013"
    
        2
  •  0
  •   Alex Mamo    1 年前

    是的,这是正确的,当使用Firestore时,有一些特定的角色 ('~', '*', '/', '[', or ']') 不允许将其用作文档中的密钥。

    有没有推荐的方法来处理限制字符的使用?我正在考虑在更新Firestore之前对字符串进行编码和解码,并在获取文档时对其进行解码,方法是用特定的字符串替换所有受限制的字符。

    虽然对字符串进行编码和解码可能会解决这个问题,但还有另一种方法可以处理这种情况。因此,在没有限制的情况下,您可以将这些字符串添加为字符串值,而不是将它们用作键。例如,假设您需要一个名为 AC/DC ,显然不能用作键,因为它包含正斜杠 / 。因此,不要使用:

    $docId:
     |
     --- AC/DC: "Best Rock band"
    

    您可以使用地图并按如下方式存储信息:

    $docId:
     |
     --- name: "AC/DC"
     |
     --- description: "Best Rock band"
    

    通过这种方式,您还可以将Firestore文档映射到类型为的对象中 RockBand 例如