4.4.0 • Published 2 years ago
@entria/graphql-mongoose-loader v4.4.0
GraphQL Mongoose Loader
Install
npm i @entria/graphql-mongoose-loader --save
yarn add @entria/graphql-mongoose-loader
Mongoose Dataloader Batch
Add batch to your GraphQL resolvers/loaders
Define a mongoose schema for your model
import mongoose from 'mongoose';
const Schema = new mongoose.Schema(
{
name: {
type: String,
},
email: {
type: String,
required: true,
index: true,
},
password: {
type: String,
hidden: true,
},
},
{
collection: 'User',
},
);
export default mongoose.model('User', Schema);
Create a Dataloader for it
import { mongooseLoader } from '@entria/graphql-mongoose-loader';
import UserModel from './User';
export const getLoader = () => new DataLoader(ids => mongooseLoader(UserModel, ids));
Connection from Mongoose Cursor
Create a connection from mongoose cursor
import { connectionFromMongoCursor } from '@entria/graphql-mongoose-loader';
export const loadUsers = async (context: GraphQLContext, args: ConnectionArguments) => {
const where = args.search
? {
name: {
$regex: new RegExp(`^${args.search}`, 'ig'),
},
}
: {};
const users = UserModel.find(where, { _id: 1 }).sort({
createdAt: -1,
});
return connectionFromMongoCursor({
cursor: users,
context,
args,
loader: load,
});
};
Connection from Mongoose Aggregate
Create a connection from mongoose aggregate
import { connectionFromMongoAggregate } from '@entria/graphql-mongoose-loader';
export const loadUsersThatHaveGroup = async (context: GraphQLContext, args: ConnectionArguments) => {
const aggregate = GroupModel.aggregate([
{
$lookup: {
from: 'User',
localField: 'users',
foreignField: '_id',
as: 'users',
},
},
{
// remove empty groups
$match: { users: { $exists: true, $ne: [] } },
},
{
// promote each user to a new document
$unwind: '$users',
},
{
$sort: {
_id: 1,
},
},
{
$replaceRoot: { newRoot: '$users' },
},
]);
return connectionFromMongoAggregate({
aggregate,
context,
args,
loader: load,
});
};
4.4.0
2 years ago
4.3.2
4 years ago
4.3.1
4 years ago
4.3.0
5 years ago
4.2.0
5 years ago
4.1.0
5 years ago
4.0.0
5 years ago
3.0.3
5 years ago
3.0.2
5 years ago
3.0.1
5 years ago
3.0.0
5 years ago
2.1.2
5 years ago
2.1.1
6 years ago
2.1.0
6 years ago
2.0.2
6 years ago
2.0.1
6 years ago
2.0.0
6 years ago
1.8.3
6 years ago
1.8.2
6 years ago
1.8.1
6 years ago
1.8.0
6 years ago
1.7.0
6 years ago
1.6.0
6 years ago
1.5.0
6 years ago
1.1.1
7 years ago
1.1.0
7 years ago
1.0.2
7 years ago
1.0.1
7 years ago
1.0.0
7 years ago