介绍
mongoose-plugin-dataloader 是一个基于 Mongoose 的 npm 包,可以帮助我们快速实现批量查询。
传统的方式是单个查询,会造成查询负担大,而 mongoose-plugin-dataloader 可以通过批量查询,减小查询负担,提高查询速度。
在使用之前,需要确认是否已经了解 Mongoose 和 GraphQL。
安装
npm install mongoose-plugin-dataloader
使用
在 Mongoose 模式中增加哪些字段需要在 dataloader 中进行查询:
const mongoose = require('mongoose') const mongooseDataLoader = require('mongoose-plugin-dataloader') const schema = new mongoose.Schema({ user_id: { type: String }, name: { type: String } ... }) schema.plugin(mongooseDataLoader) const Model = mongoose.model('Model', schema)
MongoDB 数据库中数据需要符合 dataloader keys 的规范才能正确被 dataloader 进行批量查询,若数据的_id 被替换为 GUID,那么就需要手动重写 toObject 函数。
schema.options.toObject = { transform: function (doc, ret, options) { ret.id = ret._id.toString() delete ret._id delete ret.__v return ret } }
加载数据,不必一条条调用:findById 或 findOne,而可以通过 loadMany 函数来完成批量加载。
const keys = ['1', '2', '3'] const result = await Model.loadMany(keys)
示例代码
const mongoose = require('mongoose') const mongooseDataLoader = require('mongoose-plugin-dataloader') const schema = new mongoose.Schema({ user_id: { type: String }, name: { type: String }, }) schema.options.toObject = { transform: function (doc, ret, options) { ret.id = ret._id.toString() delete ret._id delete ret.__v return ret } } schema.plugin(mongooseDataLoader) const Model = mongoose.model('Model', schema) const keys = ['1', '2', '3'] const result = await Model.loadMany(keys) console.log(result)
以上就是 mongoose-plugin-dataloader 的使用教程,试着使用它去优化你的查询吧。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/600673defb81d47349e53bdf