猫鼬自我筑巢

时间:2017-07-05 20:02:51

标签: node.js mongodb mongoose mongoose-schema mongoose-populate

我想存储以下内容:

var TestSchema = new Schema({
    name: {
        type: String
    },
    regions: [RegionSchema]
}

var RegionSchema = new Schema({
    name: {
        type: String
    },
    minX: {
        type: Number
    },
    minY: {
        type: Number
    },
    minZ: {
        type: Number
    },
    maxX: {
        type: Number
    },
    maxY: {
        type: Number
    },
    maxZ: {
        type: Number
    },
    children: [this]
});

因为你可以看到我正在尝试创建一个区域对象,能够包含区域对象,但是这无法保存,无一例外,可能是模式中​​的[this]卡在某些无限循环中。 / p>

如何使其适用于嵌套区域?

我可以期望发送到此架构的json有效负载:

name: "test123",
regions: [
        {
            name: "TestRegion",
            minX: 0,
            minY: 0,
            minZ: 0,
            maxX: 100,
            maxY: 255,
            maxZ: 100,
            children: [
                {
                    name: "TestRegionChild",
                    minX: 3,
                    minY: 3,
                    minZ: 3,
                    maxX: 97,
                    maxY: 252,
                    maxZ: 97,
                    children: []
                }
            ]
        }
    ]

感谢您的帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

如果先保存其他区域,可以将子项保存为objectIds列表,如下所示:

children: [{
     type: Schema.ObjectId,
     ref: 'Region'
}]

另一个选择是重新设计您的架构,并让父母有一个'在您所在的地区,并删除“孩子们”'领域。然后当你需要得到所有的孩子时,你可以轻松查询而不是拥有大的嵌套对象。

var RegionSchema = new Schema({
     --- other fields omitted ---

     parent: {
        type: Schema.ObjectId,
        ref: 'Region'
    }
});