2012-09-09 22 views
10

Ich versuche, das „Entwickeln Sie eine RESTful API Node.js Mit Express und Mongoose Mit“ Beispiel und ich lief in ein Problem mit dem MongoDB Schema:MongoDB: entfernen eindeutige Einschränkung

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" }', 

ein einzigartiges contraint in der Schema-Definition:

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

wie bekomme ich das los? Wenn ich unique: true entferne und die App neu starte, wird das Schema nicht aktualisiert.

Wie behandelt Mongodb "Änderungen" an das Schema?

Antwort

6

"Wie ändert sich mongodb" ändert sich "zum Schema?"

MongoDB ist Schema-weniger

Das einzige, was es Eindeutigkeit erzwungen wird auf der Indizierungsebene ist, wo Sie Indizes für eine Sammlung mit einzigartigen Kriterien definieren können. Vielleicht möchten Sie also den zugehörigen Index entfernen und bei Bedarf neu erstellen.

+8

Das hat funktioniert. Für die Referenz: > verwenden Sie ecomm_database > db.products.dropIndexes(); { \t "nIndexesWas": 2, \t "msg": "Nicht-_id Indizes fiel für die Sammlung", \t "ok": 1 } –

+0

"MongoDB ist * Schema-less *" ... warum, Gibt es dann einen ganzen Abschnitt in ihrer Dokumentation zum Schemadesign? http://www.mongodb.org/display/DOCS/Schema+Design –

+0

@ZaidMasud: eine Prozessbeschreibung mit weniger Konnotationen als "Schema-Design" könnte "Datenmodellierung" sein :). Die Daten müssen eine gewisse nominale Form annehmen (d. H. Sie müssen immer noch * Schemadesign * in Betracht ziehen, um Ihre Daten, Abfragen und Indizes zu planen). Es gibt jedoch kein starres * Schema * auf Dokument- oder Sammlungsebene. Dies ist ein deutlicher Kontrast zum SQL-Ansatz eines [festen Schemas] (http://en.wikipedia.org/wiki/Information_schema) pro Tabelle, wobei jedes Feld einen bestimmten Typ und eine bestimmte Größe aufweist. – Stennie

Verwandte Themen