【问题标题】:Firebase: how to create nested objectFirebase:如何创建嵌套对象
【发布时间】:2021-06-09 02:49:05
【问题描述】:

存在关于如何更新 Firebase 记录的嵌套属性的问题,但没有关于如何使用嵌套属性创建记录的答案。

Thisthis 相似但没有帮助。

在网络上,目标是创建具有嵌套属性的 Firebase 记录。

使用点表示法适用于更新,但在重复使用相同的键创建记录时不会创建嵌套层次结构。

这是有道理的,因为密钥不会传递有关子属性数据类型的任何信息。

创建具有嵌套属性的对象的正确方法是什么?

async test(serviceId, numCredits, emailAddress) {
    // Set credits key.
    let creditsKey = `credits.${serviceId}.numAllowed`;

    try {
        // Get user matching @emailAddress.
        let user = await this.getUser(emailAddress);

        // New user? Create database record.
        if (!user) {
            this.db_
                    .collection('users')
                    .add(
                        {
                            emailAddress: emailAddress,
                            [{creditsKey}]: numCredits
                        }
            );

        // Nope, user exists so update his/her record.
        } else {
            // Set update query.
            let query = this.db_
                                    .collection('users')
                                    .where('emailAddress', '==', emailAddress);

            // Run update query.
            const querySnapshot = await query.get();
            return querySnapshot.docs[0].ref.update({
               [creditsKey]: firebase.firestore.FieldValue.increment(numCredits)
            });
        }
    } catch(e) {
        debug('Error in test(): ' + e);
    }
}

【问题讨论】:

    标签: javascript firebase web google-cloud-firestore


    【解决方案1】:

    如果我正确理解了您的问题,以下内容就可以解决问题。 (但是可能有更优雅的解决方案......)

      const obj = {};
      obj.numAllowed = numCredits;
      const obj1 = {};
      obj1[serviceId] = obj;
    
      // ...
    
      this.db_.collection('users')
         .add(
             {
                emailAddress: emailAddress,
                credits: obj1
             })
    

    【讨论】:

    • 我们找不到更优雅的解决方案,这也是我们最终要做的。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-10
    • 1970-01-01
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多