Что считается с лимитом в 500 наименований при записи партий в пожарном депо? - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть следующий код в облачной функции, которая возвращает сообщение об ошибке с сообщением

Ошибка: 3 INVALID_ARGUMENT: максимально 500 записей разрешено на запрос

console.log(`${projectId} doClassifySources: Got ${_.size(output)} items`)

const lastClassification = new Date().toJSON()
const batch = firestore.batch()
batch.update(projectRef, {lastClassification})
_.forEach(output, item => {
  batch.set(projectRef.collection('output').doc(encodeURIComponent(item.url)), {
    classifiedAt: admin.firestore.FieldValue.serverTimestamp(),
    ...item
  }, {
    merge: true
  })
})

return batch.commit().then(() => lastClassification)

Тем не менее, журналы Firebase показывают это прямо перед выдачей ошибки:

12:28:19.963 PM classifySources ZklZYB5hq96J43CroKgP doClassifySources: Got 310 items

Мне кажется, что партия должна содержать 310 элементов, что значительно ниже предела 500.Я что-то упускаю в том, как рассчитывается этот лимит в 500 предметов?merge: true влияет на это каким-либо образом?Связано ли это с распространением item в записываемом объекте (т. Е. Увеличивает ли это количество необходимых записей)?

1 Ответ

0 голосов
/ 14 февраля 2019

При некотором дополнительном тестировании оказывается, что использование admin.firestore.FieldValue.serverTimestamp() считается дополнительной записью.С кодом, как указано выше, я ограничен 249 элементами (т. Е. Когда output.length >= 250, код завершится ошибкой с этим сообщением об ошибке. Если удалить ссылку на serverTimeStamp(), я могу получить до 499 элементов за запись.

Я не могу найти это нигде в документации, и, возможно, это ошибка в библиотеке Firebase, поэтому я опубликую проблему там и посмотрю, что произойдет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...