Wenn Sie Subdokument-Arrays haben, erstellt Mongoose automatisch IDs für jedes. Beispiel:
{
_id: "mainId"
subDocArray: [
{
_id: "unwantedId",
field: "value"
},
{
_id: "unwantedId",
field: "value"
}
]
}
Gibt es eine Möglichkeit, Mongoose anzuweisen, keine IDs für Objekte in einem Array zu erstellen?
node.js
mongodb
mongoose
subdocument
Atlas
quelle
quelle
_id
Felder auch in der SubSchema-Auflistung oder nur in dem Fall, in dem das SubSchema zum Einbetten als Array von Unterdokumentelementen verwendet wird? Ich frage dies besonders wegen meiner eigenen Frage zu SO heute.{ _id: false }
, sind beide Ebenen des Unterschemas ohne IDs. Gibt es eine Möglichkeit, dieses Verhalten zu umgehen?{ _id : true }
?let studentSchema = new Schema({ studentId: { type: ObjectId, ref: Student.modelName }, performance: [performanceSchema] }, { _id: false });
in:let studentSchema = new Schema({ _id: false, id: false, studentId: { type: ObjectId, ref: Student.modelName }, performance: [performanceSchema] });
und das hat die_id
Erstellung der Objekte gestoppt,studentSchema
aber die_id
Erstellung der Objekte imperformance
Array der Unterdokumente beibehalten . Nicht sicher, ob beide_id: false
undid: false
benötigt werden.Sie können Unterdokumente ohne Schema erstellen und vermeiden
_id
. Fügen Sie einfach_id:false
auf Ihre Subdokument Erklärung.Dadurch wird verhindert, dass
_id
in Ihrem Subdoc ein Feld erstellt wird.In Mungo getestet
v5.9.10
quelle
Wenn Sie zum Angeben eines Unterschemas eine Objektliteral-Syntax verwenden, können Sie diese auch nur hinzufügen
_id: false
, um sie zu unterdrücken.quelle
Ich verwende Mungo 4.6.3 und musste lediglich _id: false im Schema hinzufügen, ohne dass ein Unterschema erstellt werden muss.
quelle
_id
ist eher ein Feld als eine Einschränkung._id = mongoose.Types.ObjectId()
dieses Unterdokuments explizit zuweisen würde, wäre diese ID dann in der gesamten Sammlung eindeutig?Sie können eine der beiden verwenden
oder
Überprüfen Sie Ihre Mungo-Version, bevor Sie die zweite Option verwenden
quelle
Wenn Sie ein vordefiniertes Schema (mit _id) als Unterdokument (ohne _id) verwenden möchten, können Sie theoretisch wie folgt vorgehen:
Aber das hat bei mir nicht funktioniert. Also habe ich hinzugefügt:
Jetzt kann ich subSourceSchema ohne _id in mein übergeordnetes Dokument aufnehmen. Ich bin mir nicht sicher, ob dies der saubere Weg ist, aber es funktioniert.
quelle