2012-09-09 4 views
10

Je suis en train de « développer une API RESTful utilisant Node.js Avec Express et Mongoose » exemple et je suis tombé sur un problème avec le schéma MongoDB:MongoDB: supprimer la contrainte d'unicité

POST: 
{ title: 'My Awesome T-shirt 2', 
    description: 'All about the details. Of course it\'s black.', 
    style: '12345' } 
{ [MongoError: E11000 duplicate key error index: ecomm_database.products.$style_1 dup key: { : "12345" }] 
    name: 'MongoError', 
    err: 'E11000 duplicate key error index: ecomm_database.products.$style_1 dup key: { : "12345" }', 

il est unique contrainte dans la définition de schéma:

var Product = new Schema({ 
    title: { type: String, required: true }, 
    description: { type: String, required: true }, 
    style: { type: String, unique: true }, 
    modified: { type: Date, default: Date.now } }); 

Comment puis-je me débarrasser de cela? Lorsque je supprime unique: true et redémarre l'application, le schéma n'est pas mis à jour.

Comment mongodb gère-t-il les «alters» au schéma?

Répondre

6

"Comment mongodb gère-t-il les modifications du schéma?"

MongoDB est schéma moins

La seule chose là unique est appliquée est au niveau d'indexation où vous pouvez définir des index sur une collection avec des critères uniques. Vous pouvez donc vouloir supprimer l'index associé et le recréer si nécessaire.

+8

Cela a fonctionné. Pour la référence: > utilisez ecomm_database > db.products.dropIndexes(); { \t "nIndexesWas": 2, \t "msg": "index non-_id a chuté pour la collecte", \t "ok": 1} –

+0

"MongoDB est * schéma moins *" ... pourquoi, alors, y a-t-il une section entière dans leur documentation sur la conception de schémas? http://www.mongodb.org/display/DOCS/Schema+Design –

+0

@ZaidMasud: une description de processus avec moins de connotations que la "conception de schéma" pourrait être "modélisation de données" :). Les données doivent prendre une forme nominale (c'est-à-dire que vous devez toujours prendre en compte la * conception de schéma * pour planifier vos données, requêtes et index) mais aucun * schéma * strict n'est appliqué au niveau d'un document ou d'une collection. C'est un contraste distinct de l'approche SQL d'un [schéma fixe] (http://en.wikipedia.org/wiki/Information_schema) par table, où chaque champ a un type et une taille spécifiques. – Stennie

Questions connexes