2017-08-23 2 views
0

Le problème est que j'exécute ce code, après avoir vérifié les enregistrements db avec Robomongo sur Windows, je vois une seule collection créée avec le nom 'maximas' avec deux enregistrements, si je supprime Model2 de code, après le résultat de la création sera le même, mais doit être collection 'maxima'.Le nom de la collection Mongodb a changé après la création

Y at-il un bogue dans le code que je ne vois pas, ou ce mot est réservé, des idées?

Le code,

var mongoose = require('mongoose'); 

mongoose.connect('mongodb://localhost/mymodels', (e)=>{ 
if(e) throw e; 
}); 

var schema = new mongoose.Schema({ 
text: {type: String} 
}); 

var Model1 = mongoose.model('maxima', schema); 

var Model2 = mongoose.model('maximas', schema); 

var newData1 = new Model1({ 
text: 'test' 
}); 

var newData2 = new Model2({ 
text: 'test' 
}); 

newData1.save((e)=>{ 
if(e) throw e; 
console.log('Saved'); 
}); 


newData2.save((e)=>{ 
if(e) throw e; 
console.log('Saved'); 
}); 

Répondre

0

Mongoose sera automatiquement pluraliser le nom de votre modèle comme le nom de la collection. C'est pourquoi ils sont tous les deux identiques, car le nom de la deuxième collection est déjà au pluriel.

Vous pouvez passer le nom de la collection désirée comme troisième argument modèle:

var Model1 = mongoose.model('maxima', schema, 'maxima'); 

var Model2 = mongoose.model('maximas', schema, 'maximas'); 

REMARQUE: Vous pouvez également spécifier le nom de votre collection comme une option dans votre schéma:

var schema = new mongoose.Schema({ 
    text: { type: String } 
}, { 
    collection: 'maxima' 
}); 

... mais dans ce cas vous auriez besoin d'un second schéma donc la première approche ci-dessus est plus appropriée ici.

+0

Oui, vous avez raison, j'ai trouvé que Mongoose essaie d'être intelligent. Vous pouvez cependant le forcer à être ce que vous voulez: var dataSchema = new Schema ({..}, {collection: 'data'}), –

+0

Content que cela vous a aidé –