MongoDB:缺少项目中的键_id

时间:2017-10-03 16:19:33

标签: node.js mongodb mongoose

我已经获得了一些代码来修改。它是一个使用Mongoose与MongoDb实例交互的Node.js应用程序。在Mongoose中已经设置了几个模式,我已经添加了一些模式。其中包括这两种模式,它们破坏了以前存在的模式(使用小数据工作正常):

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var MapConvertedProjectSchema = new Schema(
{
    project_id : {
        type: String,
        default: ""
    },
    dataset_id : {
        type: String,
        default: ""
    },
    properties:{
        type: {},
        default: {}
    }
});

MapConvertedProjectSchema.pre('save', function(next) {
    next();
});

mongoose.model('MapConvertedProject', MapConvertedProjectSchema);

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var MapConvertedLayerSchema = new Schema(
{
    parent_id: 
    {
        type: mongoose.Schema.Types.ObjectId
    },
    class: 
    {
        type: String,
        default: 'MapLayer',
        trim: true
    },
    properties: 
    {
        type: {},
        default: {}
    }
});


//Hook a pre save method to clean date
MapConvertedLayerSchema.pre('save', function(next) {
    next();
});

mongoose.model('MapConvertedLayer', MapConvertedLayerSchema);

我像这样使用MapConvertedLayer架构:

var mongoose = require('mongoose');
var LayerConverted = mongoose.model('MapConvertedLayer');
var newLayer = new LayerConverted();
//newLayer._id is automatically populated with a value
//... add other properties
newLayer.save(function(err)
{
    if(err)
    {
        //...
    }
});

这可以解决我没有遇到的任何问题。但是,如果我使用MapConvertedProject尝试类似的代码,我会收到错误:

var mongoose = require('mongoose');
var ProjectConverted = mongoose.model('MapConvertedProject');
var map_converted = new ProjectConverted();
//map_converted._id is undefined
//I tried adding the comment below to create an _id manually, but it didn't make a difference when I tried to save
//map_converted._id = mongoose.Types.ObjectId();
console.log("Project Converted ID: " + map_converted._id);
//... fill out the other properties on the schema
map_converted.save(function(err)
{
    if(err)
    {
        //...
    }
});

保存会生成此错误:

ValidationException:一个或多个参数值无效:缺少项目中的键_id

有谁知道造成这种情况的原因是什么?

1 个答案:

答案 0 :(得分:0)

我想出来了。代码中有另一个地方有一个同名的动态模型,搞乱了。我能够删除所有对dynamoose的引用,因为它似乎不再被使用并且已经解决了这个问题。