【问题标题】:how to return a Mongoose nested array of objects如何返回 Mongoose 嵌套的对象数组
【发布时间】: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


【解决方案1】:

因此,如果有人有类似的架构设置和问题,解决方案是也引用带有嵌套级别的 typeDefs。因此,由于转录本、收件人和发件人嵌套了一层,因此必须为嵌套对象定义 typeDef,然后在消息类型上引用如下:

type messageLog {
        _id: ID
        transcript: String
        recipient: User
        sender: User
    }
    type Message {
        _id: ID
        messageLog: [messageLog]
    }

并为用户使用填充,因为它是 objectId 引用的架构

【讨论】:

    猜你喜欢
    • 2017-11-17
    • 2016-05-21
    • 1970-01-01
    • 2019-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-16
    相关资源
    最近更新 更多