使用Mongoose如何一次性获取MongoDB全库所有集合的全部数据
Mongoose 没有内置的 myDB.getallData() 这类直接拉取全库所有集合数据的方法,但你可以通过封装工具函数实现需求,不需要逐个编写集合的查询语句,实现逻辑如下:
实现代码
// 封装全量查询函数 async function getAllDBData() { const result = {} // 获取当前连接下所有已注册的Mongoose模型 const registeredModels = mongoose.connection.models // 并发查询所有集合的全量数据 await Promise.all( Object.values(registeredModels).map(async (model) => { // 取集合原生名称作为key,和你要求的结构匹配 const collectionName = model.collection.name result[collectionName] = await model.find({}) }) ) return result }
使用方式
直接调用封装好的函数即可拿到你需要的结构数据:
const allData = await getAllDBData() /* 返回结构示例: { "fast-food": [/* 快餐集合所有数据 */], "liquid": [/* 饮品集合所有数据 */] } */
注意事项
- 你提到两个集合存储了大量数据,全量拉取所有集合数据会占用极高的内存、带宽和数据库IO资源,除非是离线数据导出类场景,否则生产环境不建议直接使用该方案,建议按需分页查询。
- 如果不需要返回全部字段,可以在
find方法的第二个参数指定返回字段,比如find({}, { __v: 0 })即可排除掉Mongoose默认生成的__v字段,降低数据传输量。 - 后续新增其他集合模型后,该函数会自动包含新集合的查询逻辑,不需要额外修改代码。
内容的提问来源于stack exchange,提问作者Samandar Yusupov
相关产品推荐
相关产品推荐

