1

我有一个看起来像这样的 schema.graphqls:

type House {
  id: ID!
  rooms: Int!
  address: String!
  owner: Owner
}

type Owner: {
     name: String!,
     age: Int!
}

和一个补充的猫鼬模式:

export default class House {
    static schema = {
        rooms: Number
        address: String,
        owner: {
            type : {
                name: String,
                age: Number
            },
            required: false
        }
    };
}

我的 mongodb 中有一个像这样的对象(通知所有者故意丢失):

ObjectId("xxx") {
  rooms: 3,
  address: "the street"
}

我正在尝试检索此文档,但缺少所有者子文档(这很好,它不是强制性的)。猫鼬结果用未定义的属性填充了这个缺失的子文档,

ObjectId("xxx") {
  rooms: 3,
  address: "the street"
  owner : {
     name: undefined
     age: undefined
}

模式验证失败(因为确实名称和年龄是强制性的,如果子文档存在)。

我得到的实际错误是:

Resolve function for "House.owner" returned undefined

你能指出我在这里做错了什么吗?

提前致谢

4

1 回答 1

1

按照@Neil Lunn 的指示,我意识到问题出在猫鼬模式中,这导致我添加required: false- 这还不够,但在添加之后也default: null瞧。

问题解决了。错误消失了。最终的 mongoose 模式,可能对谁感兴趣:

export default class House {
    static schema = {
        rooms: Number
        address: String,
        owner: {
            type : {
                name: String,
                age: Number
            },
            required: false,
            default: null
        }
    };
}
于 2019-03-30T17:06:03.440 回答