【发布时间】:2019-02-08 10:46:28
【问题描述】:
我正在尝试从我在 Azure 上的 Cosmos DB 中的集合中获取所有文档。该集合包含大约 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);
});
当我在 find() 上设置 1000 或 1500 的限制时,它可以工作。
我还测试了将集合上的 RU/s 从 400 更改为 10.000(在 Azure 门户/控制台中),这也有效,但这似乎是一个昂贵的解决方案......不是吗?
我还测试了在递归循环中使用 find() 批量获取它,直到没有更多文档留下,每次迭代之间都休眠(否则 Cosmos DB 会在一段时间后给我“429:请求太多” .
有没有一种方法可以让我使用 Node.js 和 Mongoose 获取所有 50.000 个文档,而无需更改 RU/s 或执行递归循环?
提前致谢!
/丹尼尔
【问题讨论】:
标签: node.js mongoose azure-cosmosdb