UNPKG

@entria/graphql-mongoose-loader

Version:
27 lines (26 loc) 1.08 kB
"use strict"; /** * Helper to batch queries on mongoose */ Object.defineProperty(exports, "__esModule", { value: true }); exports.cacheKeyFn = void 0; function indexResults(results, indexField, cacheKey = exports.cacheKeyFn) { const indexedResults = new Map(); results.forEach(res => { indexedResults.set(cacheKey(res[indexField]), res); }); return indexedResults; } function normalizeResults(keys, indexField, cacheKey = exports.cacheKeyFn) { return (results) => { const indexedResults = indexResults(results, indexField, cacheKey); return keys.map(val => indexedResults.get(cacheKey(val)) || new Error(`Key not found : ${val}`)); }; } const cacheKeyFn = (key) => key.toString(); exports.cacheKeyFn = cacheKeyFn; async function mongooseLoader(model, keys, lean = true, keyField = '_id') { const results = lean ? await model.find({ [keyField]: { $in: keys } }).lean() : await model.find({ [keyField]: { $in: keys } }); return normalizeResults(keys, keyField, exports.cacheKeyFn)(results); } exports.default = mongooseLoader;