Обновление записей индекса Алголии при обновлении Firestore - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь использовать облачные триггеры Firestore для автоматического обновления записей в нашем индексе «пользователей» Алголии.

Вот наша облачная функция:

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)

Что мы делаем не так?

Спасибо!

РЕДАКТИРОВАТЬ: я обновил код ниже, который теперь работает, КРОМЕ ТОГО, что Алголии требуетсяИдентификатор объекта, который будет передан в объекте, чтобы он обновлял правильную запись.Как я могу ссылаться на ObjectID внутри объекта "afterData"?

Ответы [ 2 ]

0 голосов
/ 09 мая 2019

ObjectId хранится внутри context, который содержит атрибут params. Итак, где-то внутри вашего onUpdate метода вы должны объявить переменную, такую ​​как:

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

Если вы не уверены, как называется ваш ключ, вы можете использовать console.log(context.params), развернуть свои изменения в облаке Firebase, а затем посмотреть, что распечатано в журналах функций при попытке редактирования документа.

0 голосов
/ 21 марта 2019

partialUpdateObjects (объект выделения s ) ожидает arrayOfObjects, но данные, которые вы получаете из Firestore в afterData, являются объектом.

Попробуйте обернуть его в массив или еще лучше, используйте partialUpdateObject.

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

...