在前端开发中,使用 GraphQL 查询数据库是非常普遍的需求。而在使用 MongoDB 作为数据库时,可以使用 graphql-compose-mongo 包来完成 GraphQL 和 MongoDB 的查询对接。
安装
使用 npm 安装 graphql-compose-mongo 包:
npm install graphql-compose-mongo --save
基础使用
graphql-compose-mongo 提供了非常方便的 API 来连接 MongoDB 和 GraphQL,同时还包括一些独特的功能,如过滤器、分页和排序等。
创建 schema
首先,我们需要创建 schema。
-- -------------------- ---- ------- ----- - -------------- - - --------------------------- ----- - --------------- - - ------------------------------------ ----- - ---------------- - - -------------------- ----- ---------- - -------------------------------------------- - ---------------- ----- ------------------- ----- --- ----- ---------- - --- ------------------- ----- - ----- ------- --------- ----- -- ---- - ----- ------- --------- ----- -- --- ----- ---- - ------------------------ ------------ -- -- ---- ------- ------ ----- ------ - ---------------------- ----- ----------------- - ----------------------------- ------ - -------- ------------------------------ --------- ------------------------------- -- --------- - -------------- -------------------------------- --------------- --------------------------------- --------------- --------------------------------- -- ---
在这个例子中,我们使用 createConnection() 方法创建了与 MongoDB 的连接,然后定义了 User 作为我们要查询的表。接着,我们使用 composeMongoose() 方法将 User 转换为 GraphQL 的对象类型,并创建了查询和变更的 Resolver。
创建 server
为了使用 GraphQL,我们需要创建一个服务器。我们可以使用 Node.js 自带的 http 模块来实现。
-- -------------------- ---- ------- ----- - ------- - - ------------------- ----- - ---------------- - - --------------------------------- ----- ------ - ------------------ ------- ------------------ --------- ----- --- -- ----- ------------------- -- -- - -------------------- ------ ------- -- -------------------------------- ---
在这个例子中,我们使用 createHttpServer() 方法来创建一个 HTTP 服务器,并将我们之前创建的 userGraphQLSchema 作为参数传入。最后,我们监听端口 4000 并启动服务器。
查询数据
现在我们可以开始查询 MongoDB 数据库了。我们可以在浏览器的地址栏访问 http://localhost:4000/graphql,并在查询操作区域输入查询语句,如下所示:
query { userMany { name age } }
这条语句将查询所有用户的名字和年龄。
变更数据
除了查询之外,我们还可以进行变更操作,如添加、更新和删除。下面是一个添加用户的例子:
-- -------------------- ---- ------- -------- - --------------------- - ----- ------- ---- -- -- - ------ - ---- --- - - -
这条语句将会向 User 表中添加一条新记录。
过滤器、分页和排序
graphql-compose-mongo 还提供了一些有用的功能,如过滤器、分页和排序。
过滤器
假设我们需要查询年龄大于等于 18 岁的用户,可以使用如下查询:
query { userMany(filter: {age: {gt: 18}}) { name age } }
这个查询将会返回年龄大于 18 岁的用户的名字和年龄。
分页
如果数据量非常大,我们可能需要分页来避免一次性查询过多的数据。下面是一个分页查询的例子:
query { userMany(pagination: {skip: 0, limit: 10}) { name age } }
这个查询将会返回前 10 条用户的名字和年龄。这个查询中的 skip 和 limit 参数可以控制从哪里开始和查询多少条记录。
排序
我们可以按照某个字段对结果进行排序。例如,我们想要按照年龄降序排列:
query { userMany(sort: {age: -1}) { name age } }
这个查询将会返回按照年龄降序排列的所有用户的名字和年龄。
结论
graphql-compose-mongo 包提供了非常强大的工具来将 MongoDB 和 GraphQL 连接起来,使得我们可以方便地查询 MongoDB 数据库。它还包括一些高级功能,如过滤器、分页和排序,使得我们可以更好地控制结果集。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/600576b081e8991b448eaace