在Firestore更新中更新Algolia索引记录

时间:2019-03-21 19:55:28

标签: firebase vue.js google-cloud-firestore google-cloud-functions algolia

我正在尝试使用云存储触发器来自动更新我们的阿尔及利亚“用户”索引中的记录。

这是我们的云功能:

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函数日志中,我们看到此错误:

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?

2 个答案:

答案 0 :(得分:0)

partialUpdateObjects(强调对象 s )期望arrayOfObjects,但是您从afterData中的Firestore获取的数据是一个对象。

尝试将其包装成数组或更好,请使用partialUpdateObject

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

答案 1 :(得分:0)

objectId存储在context属性中,该属性具有params属性。因此,您应该在onUpdate方法内部的某个位置声明变量,例如:

const objectId = context.params.*insert the key you're using*

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