首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Firestore更新时更新Algolia索引记录

在Firestore更新时更新Algolia索引记录
EN

Stack Overflow用户
提问于 2019-03-22 03:55:28
回答 2查看 528关注 0票数 0

我正在尝试使用云firestore触发器自动更新Algolia "users“索引中的记录。

下面是我们的云函数:

代码语言:javascript
代码运行次数:0
运行
复制
exports.updateUser = functions.firestore
.document('users/{id}').onUpdate((change, context) => {
    const afterData = change.after.data()
    return algoliaIndex.partialUpdateObjects([{afterData}]).catch((err) => {
    return console.error(new Error(err))
  })
})

在我们的firebase函数日志中,我们看到以下错误:

代码语言:javascript
代码运行次数:0
运行
复制
Error: Usage: index.partialUpdateObjects(arrayOfObjects[, callback])
  at Index.partialUpdateObjects (/user_code/node_modules/algoliasearch/src/Index.js:136:11) 
  at exports.updateUser.functions.firestore.document.onUpdate (/user_code/index.js:19:26) 
  at cloudFunctionNewSignature (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:114:23)
  at cloudFunction  (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:144:20)
  at /var/tmp/worker/worker.js:827:24 
  at process._tickDomainCallback (internal/process/next_tick.js:135:7)

我们做错了什么?

谢谢!

编辑:我已经更新了下面的代码,现在可以正常工作了,除了Algolia需要在对象中传递对象ID,以便它更新适当的记录。如何在"afterData“对象中引用ObjectID?

EN

回答 2

Stack Overflow用户

发布于 2019-03-22 04:01:12

partialUpdateObjects (emphasis objects)期望的是arrayOfObjects,但您在afterData中从Firestore获得的数据是一个对象。

尝试将其包装在数组中,或者更好,使用partialUpdateObject

https://www.algolia.com/doc/api-reference/api-methods/partial-update-objects/?language=javascript

票数 0
EN

Stack Overflow用户

发布于 2019-05-09 05:08:07

objectId存储在保存params属性的context中。因此,在您的onUpdate方法中的某个地方,您应该声明如下变量:

代码语言:javascript
代码运行次数:0
运行
复制
const objectId = context.params.*insert the key you're using*

如果您不确定密钥的名称,您可以使用console.log(context.params),将您的更改部署到Firebase云,然后在尝试编辑文档时查看函数日志中打印出的内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55288337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档