gpt4 book ai didi

node.js - 如何进行更新突变 - GraphQL(加上 mongoDB)

转载 作者:太空宇宙 更新时间:2023-11-04 00:13:17 26 4
gpt4 key购买 nike

我想对相册进行更新突变,但在获取更新和返回值时遇到问题。

架构 Mongoose :

var AlbumSchema = new Schema({
name: String,
dateCreated: { type: Date, default: Date.now },
dateUpdated: { type: Date, default: Date.now }
});

GraphQL 类型:

    const AlbumType = new GraphQLObjectType({
name: 'Album',
fields: () => ({
id: {type:GraphQLID},
name: {type:GraphQLString},
dateCreated: {type: GraphQLString},
dateUpdated: {type: GraphQLString}
})
})

更新突变:

updateAlbum: { //STILL TRYING TO GET TO WORK
type: AlbumType,
args: {
id: {type: new GraphQLNonNull(GraphQLString)},
name: {type: new GraphQLNonNull(GraphQLString)}
},
resolve(parentValue, args){
return new Promise((resolve, reject) => {
ALBUM.findOneAndUpdate(
{id: args.id},
{name: args.name},
//{dateUpdated: Date.now()}
).exec((err, res) => {
if(err) reject(err)
else resolve()
})
})
}
}

测试突变:

mutation {
updateAlbum(id:"5a695c586c050802f182270c", name: "album 333"){
id
name }}

测试突变的响应:

{
"data": {
"updateAlbum": null
}
}

问题:

  1. 我应该如何编写updateAlbum函数?

  2. (不太重要)如何添加 Date.now() 来获取新的 dateUpdated: 值?

  3. 如何获取返回值或者我可以获得不是 updateAlbum: null 的响应?谢谢!

最佳答案

  1. 见下文。您需要添加“$set”来放置要更改的参数集。
    updateAlbum: {
type: AlbumType,
args: {
id: {type: new GraphQLNonNull(GraphQLString)},
name: {type: new GraphQLNonNull(GraphQLString)}
},
resolve(parentValue, args){
return new Promise((resolve, reject) => {
const date = Date().toString()
ALBUM.findOneAndUpdate(
{"_id": args.id},
{ "$set":{name: args.name, dateUpdated: date}},
{"new": true} //returns new document
).exec((err, res) => {
console.log('test', res)
if(err) reject(err)
else resolve(res)
})
})
}
}
  • 日期需要制成字符串,使用 Date() 而不是 Date.now() 保留与 mongoose 格式相同。
  • 如上所示,需要将 res 添加到 resolve()
  • 关于node.js - 如何进行更新突变 - GraphQL(加上 mongoDB),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48436366/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com