【问题标题】:Number values are saved as strings in firestore数值在 Firestore 中保存为字符串
【发布时间】:2018-07-25 12:23:27
【问题描述】:

我使用这个函数向firestore发送数据

exports.professional = functions.https.onRequest((request, response) => {
    const db = admin.firestore();

    const userId: string = request.body['userId'];
    const qualificationId: number = request.body['qualificationId'];
    const occupationId: number = request.body['occupationId'];
    const employmentType: EMPLOYMENT_TYPE = request.body['employmentType'];
    const collegeOrInstitution: string = request.body['collegeOrInstitution'];

    return db.collection('profiles').doc(userId)
        .set(
        {
            professional: {
                qualifaicationId: qualificationId,
                occupationId: occupationId,
                employmentType: employmentType,
                collegeOrInstitution: collegeOrInstitution
            }
        },
        {
            merge: true
        }).then(writeResult => {
           return response.json(
                {
                    status: 1,
                    message: 'Professional details saved successfully',
                    result: userId
                }
            )
        });
});

我已经将一些变量声明为数字,但是当我检查 firestore 文档时, 它被保存为字符串。请看截图

在代码中,我将occupationId 声明为数字变量,但保存后它是一个字符串,请再次查看屏幕截图。有人知道它为什么会改变数据类型吗?

【问题讨论】:

  • const occupationId: number --- 类型声明不转换实际数据。如果您需要数字,则需要明确使用Number() 函数。
  • 让我试试
  • @zerkms ,这行得通。请将其作为答案发布,以便我可以将其作为答案进行检查
  • 这背后的任何原因,仍然不清楚为什么它会改变 value 的数据类型

标签: typescript google-cloud-firestore


【解决方案1】:

声明,例如:

const occupationId: number

如果赋值类型是any,他们自己不会转换传递的数据(这样做是为了可以从js逐渐切换到ts)。

如果您需要明确地有一个数字 - 您需要使用为您转换实际值类型的东西。

一种可能的方法:

const occupationId: number = Number(request.body['occupationId']);

参考资料:

【讨论】:

    【解决方案2】:

    为对象设置值时,必须检查该值是有效数字还是字母,如果是有效数字则必须将其转换为正确的数字格式,否则只需传递变量照原样。

    +value || value
    

    例子:

    const apple = "Apple"
    const amount = "5"
    const getRealValue = (val) => +val || val
    
    console.log(getRealValue(apple))
    console.log(getRealValue(amount))
    
    console.log(typeof getRealValue(apple))
    console.log(typeof getRealValue(amount))

    通过这种方式,您可以让 Firestore 了解您的数据类型,这个过程可以通过 Object.keys 迭代来为您的所有对象变量完成

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-31
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-19
      • 1970-01-01
      相关资源
      最近更新 更多