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

Not all variables pass from Firestore to Algolia during onCreate() function

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

在 Firestore 中创建文档后

传递给 Algolia Index 的内容

请注意,并非所有字段都已被忽略。但是,即使在代码内部(见下文),我也在尝试显式调用这些字段并让它们通过。请帮忙!

代码

//////////////////////////////////////////////////////////////////////////////////
//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 对象直接传递给从文档快照中获取的对象。

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