【发布时间】:2021-10-20 19:13:30
【问题描述】:
我正在尝试返回我在猫鼬模型中声明的嵌套对象,如下所示:
const MessageSchema = new Schema({
messageLog: [
{
transcript: {
type: String
},
recipient: {
type: Schema.Types.ObjectId,
ref: 'User',
required: true
},
sender: {
type: Schema.Types.ObjectId,
ref: 'User',
required: true
}
}]
});
但是,当我尝试通过 graphql 解析器查询内部对象时,我无法取回内部对象的值(成绩单、发件人、收件人在 gql 操场上为空,但在 db 中更新)我已经设置好了如下:
query = args.messageId ? { _id: args.messageId } : { _id: new ObjectId() };
const message = await Message.findOneAndUpdate(query, {$addToSet: {messageLog: {transcript: args.messageBody, sender: args.senderId, recipient: args.recipientId}}}, {$setOnInsert: args, upsert: true, new: true, runValidators: true})
return message.messageLog;
我能够在数据库中创建新对象和嵌套的 messageLog,但由于某种原因我只能返回 id,而不是对象的 messageLog 数组。通常问题在于我如何解决(解析器),但我也会把我的 typeDef 放在这里,以防问题在那里。
type Message {
_id: ID
transcript: [String]
recipient: [User]
sender: [User]
}
【问题讨论】:
-
让我感到奇怪的是,您的 mongoose 架构将日志定义为消息数组,但您的 GraphQL 架构却将每个方法属性定义为数组。也许这是你的问题?
-
@Herku mongoose 模式是一个对象数组,但 graphql 模式正在返回这些值的数组,因为它们本身不是定义的类型/模式。这就是我的想法,可能不允许那样..
标签: javascript node.js mongodb mongoose graphql