代码之家  ›  专栏  ›  技术社区  ›  Karl Taylor Sobol Roman

FireStore:无法序列化“arrayunionTransform”类型的对象

  •  0
  • Karl Taylor Sobol Roman  · 技术社区  · 5 年前

    我尝试使用FireStore Docs示例更新数组中的元素:

    https://firebase.google.com/docs/firestore/manage-data/add-data#update_elements_in_an_array

    var admin = require('firebase-admin');
    
    var washingtonRef = firestore.collection('cities').doc('DC');
    
    var arrUnion = washingtonRef.update({
      regions: admin.firestore.FieldValue.arrayUnion('greater_virginia')
    });
    

    但是,当我执行此操作时,会得到以下错误:

    Error: Update() requires either a single JavaScript object or an 
    alternating list of field/value pairs that can be followed by an 
    optional precondition. Argument "dataOrField" is not a valid Document. 
    Couldn't serialize object of type "ArrayUnionTransform" (found in field 
    regions). Firestore doesn't support JavaScript objects with custom 
    prototypes (i.e. objects that were created via the "new" operator).
    
    1 回复  |  直到 5 年前
        1
  •  0
  •   Karl Taylor Sobol Roman    5 年前

    确保您使用的是正确的SDK。

    这不起作用的原因是我提到 firestore.collection('cities').doc('DC'); 实际上是从这里来的:

    const Firestore = require('@google-cloud/firestore'); // this is the wrong SDK.
    
    const firestore = new Firestore({
      projectId: 'my-project'
      keyFilename: fbKeyFile
    });
    

    正如上面所说 README.md 这是错误的:

    使用谷歌服务器SDK的应用程序不应在终端用户环境中使用,例如在电话或公共网站上。如果您正在开发代表最终用户访问云FireStore的web或node.js应用程序,请使用FireBase客户端SDK。

    为了使它工作,我简单地切换了以下内容:

    firestore.collection('cities').doc('DC');
    // to
    FirebaseAdmin.firestore().collection('cities').doc('DC');