File tree Expand file tree Collapse file tree 2 files changed +40
-10
lines changed Expand file tree Collapse file tree 2 files changed +40
-10
lines changed Original file line number Diff line number Diff line change @@ -20,6 +20,7 @@ This package uses [DataLoader](https://github.com/graphql/dataloader) for batchi
20
20
- [ Basic] ( #basic )
21
21
- [ Batching] ( #batching )
22
22
- [ Caching] ( #caching )
23
+ - [ Mongoose] ( #mongoose )
23
24
- [ API] ( #api )
24
25
- [ findOneById] ( #findonebyid )
25
26
- [ findManyByIds] ( #findmanybyids )
@@ -87,6 +88,26 @@ class Users extends MongoDataSource {
87
88
}
88
89
```
89
90
91
+ ### Mongoose
92
+
93
+ You can use mongoose the same way as with the native mongodb client
94
+
95
+ ``` js
96
+ import mongoose from ' mongoose'
97
+ import Users from ' ./data-sources/Users.js'
98
+
99
+ const userSchema = new mongoose.Schema ({ name: ' string' });
100
+ const UsersModel = mongoose .model (' users' , userSchema);
101
+
102
+ const server = new ApolloServer ({
103
+ typeDefs,
104
+ resolvers,
105
+ dataSources : () => ({
106
+ db: new Users ({ users: UsersModel })
107
+ })
108
+ })
109
+ ```
110
+
90
111
### Batching
91
112
92
113
This is the main feature, and is always enabled. Here's a full example:
Original file line number Diff line number Diff line change 1
1
import DataLoader from 'dataloader'
2
2
3
+ const remapDocs = ( docs , ids ) => {
4
+ const idMap = { }
5
+ docs . forEach ( doc => {
6
+ idMap [ doc . _id ] = doc
7
+ } )
8
+ return ids . map ( id => idMap [ id ] )
9
+ }
10
+
3
11
export const createCachingMethods = ( { collection, cache } ) => {
12
+ const isMongoose = typeof collection === 'function'
13
+
4
14
const loader = new DataLoader ( ids =>
5
- collection
6
- . find ( { _id : { $in : ids } } )
7
- . toArray ( )
8
- . then ( docs => {
9
- const idMap = { }
10
- docs . forEach ( doc => {
11
- idMap [ doc . _id ] = doc
12
- } )
13
- return ids . map ( id => idMap [ id ] )
14
- } )
15
+ isMongoose
16
+ ? collection
17
+ . find ( { _id : { $in : ids } } )
18
+ . lean ( )
19
+ . then ( docs => remapDocs ( docs , ids ) )
20
+ : collection
21
+ . find ( { _id : { $in : ids } } )
22
+ . toArray ( )
23
+ . then ( docs => remapDocs ( docs , ids ) )
15
24
)
16
25
17
26
const cachePrefix = `mongo-${ collection . collectionName } -`
You can’t perform that action at this time.
0 commit comments