【发布时间】:2018-07-07 15:23:19
【问题描述】:
我不完全了解 MongoDB 关系的工作方式,但我相信专辑与艺术家的关系是 艺术家(我称他们为用户)在数组,可能称为albums: [],所有专辑都有一个createdBy: {id: 12345}。
所以我想创建一个 updateAlbum 调用,但我不知道如何从 GraphQL 将 ID 保存到 createdBy:。
这是架构:
var AlbumSchema = new Schema({
name: String,
dateCreated: { type: Date, default: Date.now },
dateUpdated: { type: Date, default: Date.now },
users: [{ type: Schema.Types.ObjectId, ref: 'User' }],
createdBy: { type: Schema.Types.ObjectId, ref: 'User'}
});
var UserSchema = new Schema({
fName: String,
lName: String,
albums: [{ type: Schema.Types.ObjectId, ref: 'Album'}]
});
这里是 GraphQL 类型:
const UserType = new GraphQLObjectType({
name: 'User',
fields: () => ({
id: {type: GraphQLID},
fName: {type: GraphQLString},
lName: {type: GraphQLString},
albums: {type: new GraphQLList(AlbumType)}
})
})
const AlbumType = new GraphQLObjectType({
name: 'Album',
fields: () => ({
id: {type:GraphQLID},
name: {type:GraphQLString},
dateCreated: {type: GraphQLString},
dateUpdated: {type: GraphQLString},
users: {type: new GraphQLList(UserType)},
createdBy: {type: UserType}
})
})
这里是 updateAlbum 调用:
updateAlbum: {
type: AlbumType,
args: {
id: {type: new GraphQLNonNull(GraphQLString)},
name: {type: GraphQLString},
createdById: {type: GraphQLString}
},
resolve(parentValue, args){
return new Promise((resolve, reject) => {
console.log(args.createdById)
const date = Date().toString()
ALBUM.findOneAndUpdate(
{"_id": args.id},
{ "$set":{name: args.name,
dateUpdated: date,
createdBy: args.createdById}},
{"new": true} //returns new document
).exec((err, res) => {
if(err) reject(err)
else resolve(res)
})
})
}
}
如何在 updateAlbum 函数中保存关系?
这就是我得到的 - 如果我保存 createdBy: THE_ID_STRING 它不会正确执行,当我查询时我得到一个奇怪的未知字符字符串“Zj�����\b�\u001e�(” ID 字符串 console.log() 为 "5a6ac1afac97c908dc1edf28"
【问题讨论】:
标签: node.js mongodb mongoose graphql