繁体   English   中英

使用 firestore.FieldValue.increment(1) 时如何解决错误“参数“dataOrField”的值不是有效的 Firestore 文档”?

[英]How to resolve error "Value for argument "dataOrField" is not a valid Firestore document" while using firestore.FieldValue.increment(1)?

我正在执行一个简单的操作,我试图增加一个字段的计数。 代码如下:

import * as firebase from 'firebase';

const DocumentRef = db.doc(`pages/${request.params.pageId}`);

const increment = firebase.firestore.FieldValue.increment(1);

DocumentRef
    .get()
    .then(function (documentSnapshot) {
        if(!documentSnapshot.exists){
            return response.status(404).json({"message":"page not found"})
        }else{
            return db.collection(`comments`).add(newComment)
        }
    })
    .then(()=>{
        return DocumentRef.update({nComments: increment})
    })
    .then(() => {
        response.status(200).json(newComment);
    })
    .catch((error) => {
        console.log(error)
        return response.status(500).json({message:error.code});
    })

最终出现以下错误:

Error: Update() requires either a single JavaScript object or an alternating list of field/value pairs that can be followed by an optional precondition. Value for argument "dataOrField" is not a valid Firestore document. Couldn't serialize object of type "FieldValueDelegate" (found in field "nComments"). Firestore doesn't support JavaScript objects with custom prototypes (i.e. objects that were created via the "new" operator).
    at WriteBatch.update (/srv/node_modules/@google-cloud/firestore/build/src/write-batch.js:374:23)
    at DocumentReference.update (/srv/node_modules/@google-cloud/firestore/build/src/reference.js:377:14)
    at screamDocumentRef.get.then.then (/srv/lib/handlers/screams.js:105:34)
    at <anonymous> 

消息是:

Update() 需要单个 JavaScript object 或可以后跟可选前提条件的交替字段/值对列表。 参数“dataOrField”的值不是有效的 Firestore 文档。 无法序列化“FieldValueDelegate”类型的 object(在字段“nComments”中找到)。 Firestore 不支持具有自定义原型的 JavaScript 对象(即通过“new”运算符创建的对象)。

仅当我添加此“then”链时才会发生此错误:

.then(()=>{
        return DocumentRef.update({nComments: increment})
    })

我不懂为什么。

只有架构的相关部分,我有 2 collections。

   collection: pages(nComments, body, etc)    id: pageId 
   collection: comments(pageId, etc)          id: commentId

when new comment document is added in comments collection, Im updating the count in pages collections document whose pageId is in comment documents pageId field.

nComments and pageId are fields.

您可能正在使用admin命名空间进行更新,同时使用来自firebase命名空间的increment 尝试将增量语句更改为:

import * as admin from 'firebase-admin';
const increment = admin.firestore.FieldValue.increment(1);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM