2013-06-22 7 views

Antwort

164

Es ist einfach, können Sie dies in der Subschemas definieren:

var mongoose = require("mongoose"); 

var subSchema = mongoose.Schema({ 
    //your subschema content 
},{ _id : false }); 

var schema = mongoose.Schema({ 
    // schema content 
    subSchemaCollection : [subSchema] 
}); 

var model = mongoose.model('tablename', schema); 
+0

Überspringt dies '_id' Felder auch in der subSchema-Auflistung oder nur in dem Fall, in dem das subSchema zum Einbetten als ein Array von Unterdokumenten verwendet wird? Ich frage dies vor allem wegen meiner eigenen [Frage] (http://stackoverflow.com/questions/38151433/mongoose-inserts-extra-id-in-array-of-objects-entsprechenden-related-entity) auf SO heute. –

+0

Ich verwende zwei Ebenen von verschachtelten Subschema-Sammlungen. Mit anderen Worten, ich habe eine SubSchema-Sammlung, die Ihrem Beispiel ähnlich ist. Innerhalb dieser verwende ich eine andere Unterschema-Sammlung. Ich möchte, dass nur die Subschema-Modellinstanzen der ersten Ebene keine IDs verwenden, aber die Submodellinstanzen der zweiten Ebene (geschachtelt) müssen IDs haben. Wenn ich Ihre Lösung verwende, also '{_id: false}', sind beide Ebenen des Unterschemas ohne IDs. Gibt es eine Möglichkeit, dieses Verhalten zu umgehen? –

+1

Haben Sie versucht, für die dritte Ebene '{_id: true}' zu setzen? – throrin19

-3

In Mungo v.3 jetzt haben Sie alternative Art und Weise Unterlagen ohne Eltern zu schaffen - Kinder Beziehungen. Und diese Unterdokumente haben keinen Index

var mongoose = require("mongoose"); 

var schema = mongoose.Schema({ 
    // schema content 
subSchema: [{ 
    firstname: 'sub name', 
    lastname: 'last name' 
    }] 
}); 

var model = mongoose.model('tablename', schema); 
+1

Das letzte Mal, wenn ich es überprüfe, mongoose fügt diesen Unterdokumenten auch ids hinzu. –

+0

Sie fügen IDs zu Subdocs hinzu – wlingke

78

Sie können Unterdokumente ohne Schema erstellen und _id vermeiden. Fügen Sie einfach _id: false zu Ihrer Filialdokument-Deklaration hinzu.

var schema = new mongoose.Schema({ 
    field1:{type:String}, 
    subdocArray:[{ 
     _id:false, 
     field :{type:String} 
    }] 
}); 

Dies verhindert die Erstellung eines _id-Felds in Ihrem Subdoc. Getestet in Mongoose 3.8.1

24

Wenn Sie eine Objektliteralsyntax für die Angabe eines Unterschemas verwenden, können Sie auch einfach _id: false hinzufügen, um es zu unterdrücken.

{ 
    sub: { 
     property1: String, 
     property2: String, 
     _id: false 
    } 
} 
11

Ich verwende Mungo 4.6.3 und alles, was ich tun musste, war _id hinzufügen: false in dem Schema, keine Notwendigkeit, eine Subschemas zu machen.

+0

Gibt es eine Möglichkeit, die gesamte Sammlung einzigartig zu machen? – Saitama

+0

Wahrscheinlich nicht mit dieser Methode, aber Sie könnten es immer versuchen. '_id' ist ein Feld und keine Einschränkung. – jemiloii

+0

Wenn ich während der Erstellung dieses Unterdokuments explizit '' '_id = mongoose.Types.ObjectId()' '' zuweise, wäre das _id dann über die Sammlung hinweg eindeutig? – Saitama

Verwandte Themen