我正在建立一个个人博客并选择Gatsby是因为显而易见的原因(性能高且易于入门),并且我对前端有一些React背景。另外,我已经构建了一个简单的应用程序来创建我的内容(html字符串)并使用快递服务器存储在MongoDB数据库中。现在,对于博客,我只是尝试使用gatsby-source-mongodb
插件从MongoDB中提取数据。
我的MongoDB模式具有关系。例如,“发布”模式具有“用户”属性,该属性是从“用户”模式引用用户的ObjectID。我对gatsby-source-mongodb
的配置如下:
{
resolve: 'gatsby-source-mongodb',
options: {
dbName: 'KathaDB',
collection: 'posts',
server: {
address: "somecluster",
port: 27017
},
auth: {
user: 'someuser',
password: 'somepasswd'
},
extraParams: {
replicaSet: 'test',
ssl: true,
authSource: 'admin',
retryWrites: true,
preserveObjectIds: true
}
}
}
我有几个问题:
答案 0 :(得分:4)
可以。
MongoDB依赖于ObjectID进行关联,因此您可能必须在插件选项中添加preserveObjectIds: true
:
{
resolve: "gatsby-source-mongodb",
options: {
dbName: "KathaDB",
collection: "posts",
server: {
address: "somecluster",
port: 27017,
},
auth: {
user: "someuser",
password: "somepasswd",
},
extraParams: {
replicaSet: "test",
ssl: true,
authSource: "admin",
retryWrites: true,
preserveObjectIds: true,
},
preserveObjectIds: true, // <= here
},
};
我不确定gatsby-source-mongodb
是否开箱即用地创建关系(如果我的记忆正确,我不认为会创建关系),但是使用ObjectIds
可以创建外部GraphQL建立关键关系。
在盖茨比,有两种方法可以做到这一点:
gatsby-config.js
@link
directive通过Gatsby的模式自定义(来自v2.2)我推荐第二个选项,因为它是一种更GraphQL的处理方式,它发生在发生大多数节点操作的gatsby-node.js
中。但是,如果您刚开始使用Gatsby和GraphQL,则第一个选项可能更易于设置。