MongoDB позволяет вам использовать cursor.count()
даже при передаче limit()
или skip()
.
Допустим, у вас есть db.collection
с 10 элементами.
Вы может сделать:
async function getQuery() {
let query = await db.collection.find({}).skip(5).limit(5); // returns last 5 items in db
let countTotal = await query.count() // returns 10-- will not take `skip` or `limit` into consideration
let countWithConstraints = await query.count(true) // returns 5 -- will take into consideration `skip` and `limit`
return { query, countTotal }
}
Вы уже взглянули на это? https://docs.aws.amazon.com/sns/latest/dg/sns-large-payload-raw-message-delivery.html
Если вы считаете, что файл может увеличить время я предлагаю другой подход.
Поместите файл в корзину S3 и прикрепите уведомление о событии S3 к SNSTopic, чтобы все потребители были уведомлены о готовности нового файла к обработке. Другими словами, сообщением SNS будет местоположение файла, а не сам файл. Подумай об этом.
Вы можете сжать тело сообщения - , однако - тела сообщения SNS поддерживают только символьные данные UTF-8. Сжатые данные являются двоичными, поэтому они не совместимы напрямую с SNS, поскольку не каждая возможная последовательность байтов также является допустимой последовательностью символов UTF-8.
Итак, после распаковки полезной нагрузки вам необходимо кодировать эти двоичные данные, используя схему типа base-64. Base-64 кодирует произвольные двоичные данные (8 бит на байт), используя только 64 (что составляет 2 ^ 6, что фактически дает 6 бит на байт) символы, поэтому в результате этого число байтов увеличивается на 8/6 (133%). кодирование. Это означает, что 192 КБ двоичных данных кодируется в 256 КБ данных в кодировке Base-64, поэтому максимально допустимый размер вашего сообщения после gzip становится 192 КБ (поскольку ограничение SNS составляет 256 КБ). Но все символы base-64 являются действительными однобайтовыми символами UTF-8, что является существенной причиной, почему это кодирование используется так часто, несмотря на увеличение его размера. Это и тот факт, что gzip обычно имеет степень сжатия, намного превосходящую 1,33: 1 (что является точкой безубыточности для gzip + base-64).
Но если ваши сообщения будут gzip до 192K или ниже, это определенно работает с SNS (а также SQS, который имеет тот же набор символов и ограничения размера).