当前位置: 首页 > 知识库问答 >
问题:

Cloud Fireste-Cloud Functions: TypeError:集合ef.child不是函数

蓝鸿哲
2023-03-14

Cloud Fireste-Cloud Functions: TypeError:集合ef.child不是函数

我正在使用云函数更新Cloud Firestore父集合中的注释编号,因此当添加注释时,云函数可以自动更新注释编号。

云Firestore-云函数:TypeError:collectionRef。child不是导出时的函数。updateCommentNumbers1。功能。消防商店。文件在对象上创建(/user\u code/index.js:23:33)。(/user_code/node_modules/firebase functions/lib/cloud functions.js:112:27)在下一个(本地)at/user_code/node_modules/firebase functions/lib/cloud functions。js:28:71在cloudFunction(/user\u code/node\u modules/firebase functions/lib/cloud functions.js:24:12)在cloudFunction(/user\u code/node\u modules/firebase functions/lib/cloud functions.js:82:36)在/var/tmp/worker/worker。js:716:24在过程中_tickDomainCallback(内部/process/next_tick.js:135:7)

代码是:

exports.updateCommentNumbers1 = functions.firestore
.document('postlist/{postlistId}/comments/{commentsID}')
.onCreate((change, context) => 
{
    const collectionRef = change.ref.parent;
    const countRef = collectionRef.child('comment_number');

    let increment;
    if (change.after.exists() )
    {
        increment = 1;
    }
     else 
    {
        return null;
    }

    return countRef.transaction((current) => 
    {
        return (current || 0) + increment;
    }).then(() => 
    {
        return console.log('Comments numbers updated.');
    });
});

问题是

>

  • 如何通过其子集合引用父集合?

    如何获取父集合的字段值并进行更新?

    谢谢你。

  • 共有2个答案

    暨修洁
    2023-03-14

    最后,我花了两天多的时间才弄明白:

    第一个问题的答案是change。之后参考父母

    CloudFireStore的云函数示例非常少。

    所有示例都是Firebase实时数据库。

    exports.updateCommentNum = functions.firestore
    .document('post/{postId}/comments/{commentsID}')
    .onWrite((change, context) => 
    {
    
        const db = admin.firestore();
        const collectionRef = change.after.ref.parent;//'post/{postId}/comments/'
        const countRef = collectionRef.parent;//'post/{postId}/'
    
        return db.runTransaction(t => 
        {
            return t.get(countRef).then(restDoc => 
            {
                var newNumber;
                newNumber = restDoc.data().comment_number + 1;
                newNumber = newNumber || 1;//filter any "falsey" value to 1.
                //The "falsey" values are:false/null/undefined/0/"" ( empty string )/NaN ( Not a Number )
    
                return t.set(countRef, {comment_number: newNumber}, {merge: true});
            });
        });
    
    
    });
    

    司徒高寒
    2023-03-14

    代码中的collectionRef是CollectionReference类型的对象。从API文档中可以看到,该对象上没有child()方法。事实上,集合根本没有任何可分配的属性。您只能在文档中存储信息,文档必须存在于某些集合中。

    因此,您必须找出要存储此计数值的文档(在哪个集合中),并修改该文档中的某些字段。

    此外,传递给onCreate的匿名函数的第一个参数不是“change”对象。这是一个文档快照。onUpdate和onWrite接收“更改”对象,这是另一回事。

     类似资料:
    • 嗨,我是Backbonejs的新手, 我在尝试一个示例时遇到了一个问题http://addyosmani.github.com/backbone-fundamentals/#validation 我已经创建了一个模型为myTodo和myTodo1的2对象, 如果我像这样调用set函数,它返回完成:由于验证错误而返回false 购买为什么在执行以下代码时不执行验证 虽然这两组代码做相同的工作,但在第

    • 在连续情景中,我们不得不处理函数的集合和函数的系集。由函数集的名字可以看出,它就是一组函数,通常是一个变量——时间的函数。为描述函数集,我们可以给出集合中各种函数的显式表达式,也可以给出只有集合中的函数才拥有的性质。下面是一些示例: 由以下函数组成的集合: 。 的每个具体值确定了集合中的一个特定函数。 一个由时间函数组成的集合,其中包含频率不超过W周期/秒的所有时间函数。 一个由带宽局限于W、幅度

    • 我有一个困扰我好几天的问题。我正在尝试创建一个从Firestore数据库读取的Firebase云函数。 我的Firestore DB如下所示: 问题是我无法像这样列出: 如果我尝试这样做,我会得到空响应,就像我的集合中没有用户一样。 但我尝试直接访问用户它可以工作: 我的完整代码: 有人知道我做错了什么吗?非常感谢。

    • 在我们这个项目我们已经使用过集合了,但是现在是时候展示它们结合函数操作符之后有多强大了。关于函数式编程很不错的一点是我们不用去解释我们怎么去做,而是直接说我想做什么。比如,如果我想去过滤一个list,不用去创建一个list,遍历这个list的每一项,然后如果满足一定的条件则放到一个新的集合中,而是直接食用filer函数并指明我想用的过滤器。用这种方式,我们可以节省大量的代码。 虽然我们可以直接用J

    • 问题内容: 当我试图在React版本15.2.0中使用这两个函数时,我在代码中发现了一个问题,尽管如此,我找到了一种解决方法,但是我想知道是否有更好的解决方案。 因此,每当我尝试运行index.html文件时,都不会显示任何内容,但是控制台会出现第一个错误: React.render不是function 。我发现发生这种情况是因为新版本的React需要使用react-dom,即 现在问题已解决,但

    • each_.each(list, iteratee, [context]) Alias: forEach 遍历list中的所有元素,按顺序用每个元素当做参数调用 iteratee 函数。如果传递了context参数,则把iteratee绑定到context对象上。每次调用iteratee都会传递三个参数:(element, index, list)。如果list是个JavaScript对象,ite