【发布时间】:2021-04-25 00:36:54
【问题描述】:
我正在使用 apollo graphql 调用一些突变来更改数据库数据。我需要一些建议,通常应该返回哪个值。
对于insertOne(),我将返回新文档的 ID,对于删除数据集,我还将返回 ID,以删除客户端缓存中的数据集。
但是updateOne 呢?因为它可能是一个非常简单的任务,如下所示,但有时它可以进行一些复杂的更新?我不太确定哪个是最有用的返回值。
在这个简单的示例中,我只是更新了特定 mongodb 文档的一些内容。现在这个方法的 WriteResult 被返回了。但这真的有用吗?
我看到以下选项:
- 返回 writeResult 对象 - 需要在后端定义
- 检查 writeResult 并返回布尔值,例如结果.nModified > 0
- 返回内容结果 - 最后将是输入内容
- 返回更新的文档 - 这需要
findOne({ _id: id }) - 只是返回
true,可能不是很有用?!
我知道没有适用于所有用例的单一解决方案,但也许有人可以解释一般情况下应该采用哪种方式......
服务器
async updateContent(id, name, value) {
const Content = this.db.collection('content')
return Content.updateOne(
{ _id: id },
{ $set: { [name]: value } }
)
}
客户
updateContent({
variables: { id, name, value }
})
.then((response) => {
// response.data.updateContent
})
.catch((error) => console.error(error))
graphql
mutation updateContent($id: ID!, $name: String, $value: String) {
updateContent(id: $id, name: $name, value: $value) {
nModified
}
}
架构
type WriteResult {
nModified: Int,
nRemoved: Int,
nInserted: Int,
n: Int
ok: Int
}
type Mutation {
updateContent(id: ID!, name: String, value: String): ContentString
}
【问题讨论】:
-
通常突变解析器返回...突变类型(但它是一个graphql,您不必查询所有字段/道具;响应将被过滤掉;返回数据=成功)...甚至删除的,惊喜! :D
标签: javascript mongodb graphql