npm 包 mongoose-plugin-dataloader 使用教程

介绍

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


纠错
反馈