在onCreate函数期间,并非所有变量都从Firestore传递到Algolia

问题描述

我只是想获取Firestore Functions,以将来自Firestore的新文档中的信息传递到Algolia索引中。不幸的是,我只能得到传递的部分变量,但不是全部,我也不知道为什么。 (请查看下面的图片以获取更多背景信息。)

在Firestore中创建文档后

enter image description here

已传递给Algolia Index的内容

enter image description here

请注意,并非所有字段都已传递。但是,即使在代码内部(请参见下文),我也试图显式调用这些字段并使它们通过。请帮助!

代码

//////////////////////////////////////////////////////////////////////////////////
//Setting up and initializing.                                                  //
//////////////////////////////////////////////////////////////////////////////////

const functions = require('firebase-functions');
const admin = require('firebase-admin');
const algoliasearch = require('algoliasearch');
admin.initializeApp(functions.config().firebase);

///////////////////////////////////////////////////////////////////////////////////
// Initialize Algolia,requires installing Algolia dependencies:                 //
// https://www.algolia.com/doc/api-client/javascript/getting-started/#install    //
// App ID and API Key are stored in functions config variables                   //
///////////////////////////////////////////////////////////////////////////////////

const ALGOLIA_ID = functions.config().algolia.appid;
const ALGOLIA_ADMIN_KEY = functions.config().algolia.apikey;
const ALGOLIA_SEARCH_KEY = functions.config().algolia.search_key;
const ALGOLIA_INDEX_NAME = 'searchable_courses';
const client = algoliasearch(ALGOLIA_ID,ALGOLIA_ADMIN_KEY);

////////////////////////////////////////////////////////////////////////////////////
//ADDING A FUNCTION THAT UPDATES THE INDEX EACH TIME A COURSE IS MADE             //
////////////////////////////////////////////////////////////////////////////////////

exports.onCourseCreated = functions.firestore.document('searchable_courses/{courseID}')
.onCreate((snap,context) => {

    // Get the newly made "course" document
    const course = snap.data();

    // Trying to add all the fields from the Firestore "course" document into Algolia index.
    course.objectID = context.params.courseID;
    course.courseID = context.params.courseID;
    course.courseTitle = context.params.courseTitle;
    course.authorUID = context.params.authorUID;
    course.description = context.params.description;
    course.subscriptionRate = context.params.subscriptionRate;
    course.numberOfSubscribers = context.params.numberOfSubscribers;
    course.datePosted = context.params.datePosted;
    course.numberOfLectures = context.params.numberOfLectures;
    course.numberOfQuestions = context.params.numberOfQuestions;

  
    // Write to the algolia index
    const index = client.initIndex(ALGOLIA_INDEX_NAME);
    return index.saveObject(course);
  });

解决方法

从新创建的文档获得的数据不存在于context参数中。它位于snap参数中,该参数是一个DocumentSnapshot对象。现在,您将从快照中获取的所有数据都覆盖到course变量中。

您应该删除使用context.parameter.X的所有行,并将course对象从文档快照中获取时直接传递给Algolia。

我建议还回顾documentation for Firestore triggers,以更好地了解它们的工作原理。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...