Javascript 无法读取属性';验证';未定义的

Javascript 无法读取属性';验证';未定义的,javascript,node.js,mongoose,Javascript,Node.js,Mongoose,不知为什么,我在这里设置的模型不正确,我看不到它。我已经研究过这个问题: 我认为这不是我想要的解决方案。我正在尝试设置一个简单的文档,其中包含一个嵌套对象和另一个嵌套对象数组。我不断地发现这个错误: Cannot read property 'validate' of undefined 这是我试图运行的代码 var mapSchema = new Schema({ map_key : { i : { type : Number, required :

不知为什么,我在这里设置的模型不正确,我看不到它。我已经研究过这个问题:

我认为这不是我想要的解决方案。我正在尝试设置一个简单的文档,其中包含一个嵌套对象和另一个嵌套对象数组。我不断地发现这个错误:

Cannot read property 'validate' of undefined
这是我试图运行的代码

var mapSchema = new Schema({
map_key : {
    i : {
        type : Number,
        required : 'Map Key i required'
    },
    j : {
        type : Number,
        required : 'Map Key j required'
    },
    k : {
        type : Number,
        required : 'Map Key k required'
    }
},
tiles : [ {
    x : {
        type : Number,
        required : 'Tile x required'
    },
    y : {
        type : Number,
        required : 'Tile y required'
    },
    tile_type : {
        type : Number,
        required : 'Tile type required'
    }
} ]
});

mapSchema.path('map_key').validate(function(value, next) {
    mapService.findMap(value, function(err, map) {
        if (err) {
            console.log(err);
            return next(false);
        }
        next(!map);
    });
}, 'Map already created');
感谢您的帮助。谢谢

更新:不管它值多少钱,我已经尝试将模型简化为最简单的形式,但没有成功:

var mapSchema = new Schema({
map_key : {
    i :  Number,

    j : Number,

    k :  Number

},
tiles : [ {
    x :  Number,

    y :  Number,

    tile_type : Number
} ]
});

mapSchema.path('map_key').validate(function(value, next) {
    mapService.findMap(value, function(err, map) {
        if (err) {
            console.log(err);
            return next(false);
        }
        next(!map);
    });
}, 'Map already created');
更新。。再一次。。因此,我删除了map_key对象,并将验证器更改为tiles对象,以尝试缩小范围。删除map_key对象时,我没有收到错误:

var mapSchema = new Schema({
tiles : [ {
    x :  Number,

    y :  Number,

    tile_type : Number
} ]
});

mapSchema.path('tiles').validate(function(value, next) {
mapService.findMap(value, function(err, map) {
    if (err) {
        console.log(err);
        return next(false);
    }
    // If the map exists, return false, else it will be null.
    next(!map);
});
}, 'Map already created');

所以我猜这个错误与map_键和它的设置方式有关,但我仍然不知道它出了什么问题。

好的。。所以我让它工作了。不完全确定为什么会这样,文档中的所有内容都显示了我最初的方式。我必须将整个map_key对象放在它自己的类型中。我也不知道为什么会这样,但至少我已经恢复了。这是我的解决方案,它对任何可能有类似问题的人都有价值

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var mapService = require('../services/map-service');

var mapSchema = new Schema({
    map_key : {type:{
        i : {
            type : Number,
            required : 'Map Key i required'
        },
        j : {
            type : Number,
            required : 'Map Key j required'
        },
        k : {
            type : Number,
            required : 'Map Key k required'
        }
    }},
    tiles : [{
            x : {
                type : Number,
                required : 'Tile x required'
            },
            y : {
                type : Number,
                required : 'Tile y required'
            },
            tile_type : {
                type : Number,
                required : 'Tile type required'
            }
        }
    ]
});

mapSchema.path('map_key').validate(function(value, next) {
    mapService.findMap(value, function(err, map) {
        if (err) {
            console.log(err);
            return next(false);
        }

        next(!map);
    });
}, 'Map already created');

var Map = mongoose.model('Map', mapSchema);

module.exports = {
    Map : Map
};