2017-10-03 2 views
0

J'ai reçu du code à modifier. C'est une application Node.js utilisant Mongoose pour interagir avec une instance MongoDb. Dans Mongoose plusieurs schémas étaient déjà mis en place et j'en ai ajouté quelques uns. Parmi ceux sont ces deux schémas qui se brisent un schéma existant précédemment (qui fonctionnait très bien avec de petites données):MongoDB: Manquant la clé _id dans l'article

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); 

et

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); 

J'utilise le schéma MapConvertedLayer comme ceci:

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) 
    { 
     //... 
    } 
}); 

Cela fonctionne sans problèmes que je peux discerner. Toutefois, si je tente un code similaire avec MapConvertedProject je reçois une erreur:

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) 
    { 
     //... 
    } 
}); 

La sauvegarde génère cette erreur:

ValidationException: Une ou plusieurs valeurs de paramètres ne sont pas valides: Manquer la _id clé dans l'élément

Est-ce que quelqu'un sait ce qui cause cela?

Répondre

0

Je l'ai compris. Il y avait un autre endroit dans le code qui avait un modèle dynamoose avec le même nom qui gâchait les choses. J'ai été en mesure de supprimer toutes les références à dynamoose car il ne semble plus être utilisé et cela a résolu ce problème.