在 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 以更好地了解它们的工作原理。
我只是想让 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 以更好地了解它们的工作原理。