Я пытаюсь получить ВСЕ документы из коллекции в моей базе данных Cosmos, которую я имею в Azure. Коллекция содержит около 50 000 документов.
Я получаю эту ошибку: MongoError: cursor does not exist, was killed or timed out
, когда я делаю это:
const mongoose = require('mongoose');
const mongooseOptions = { useNewUrlParser: true };
mongoose.connect(connectionString, mongooseOptions);
mongoose.set('useCreateIndex', true);
mongoose.Promise = global.Promise;
const mongoDB = mongoose.connection;
mongoDB.on('error', console.error.bind(console, 'MongoDB connection error:'));
const Schema = mongoose.Schema;
const MongoEidModelSchema = new Schema({
uid: { type: String, unique: true },
eid: { type: String, unique: true }
});
const MongoEidModel = mongoose.model('eids', MongoEidModelSchema);
MongoEidModel.find({}, {timeout: false}).then(data => {
console.log(data);
console.log(Object.keys(data).length);
});
Когда я устанавливаю предел 1000 или 1500 на find()
, он работает.
Я также протестировал изменение RU / s для коллекции с 400 на 10.000 (на портале / консоли Azure), что также работает, но это кажется дорогостоящим решением ... не так ли?
Я также проверил, чтобы получить это с find()
в пакетах в рекурсивном цикле, пока не останется больше документов, с перерывом между каждой итерацией (в противном случае Cosmos DB выдает мне «429: слишком много запросов» через некоторое время .
Есть ли способ, которым я могу получить ВСЕ 50 000 документов, используя Node.js и Mongoose, не меняя RU / s или не делая рекурсивные циклы?
Заранее спасибо!
/ Daniel