2017-08-30 5 views
4

In meinem Food Schema, ich habe verschiedene Felder basierend auf dem anderen Feld yummy genannt. Zum Beispiel:Mongoose Schema erstellt leeres Array Feld

  • wenn yummy gleich pancake, meine Felder sind dough und jam
  • wenn yummy gleich pizza, meine Felder sind dough, meat und cheese

etc. Es funktioniert wie erwartet beim Speichern Dokumente - Ich übergebe nur die Felder, die ich für das Dokument speichern möchte, da keine von ihnen außer yummy erforderlich sind. Also, wenn ich sparen:

{ 
    yummy: 'pizza' 
    dough: 'thin' 
    meat : 'peperroni', 
    cheese: [ObjectId("59a65a4f2170d90b0436ed4b")] // refs to the cheeses collection. 
} 

Mein Dokument sieht aus wie erwartet.

Das Problem ist, mit dem Feld von type: Array. Als ich spare:

{ 
    yummy: 'pancake', 
    dough: 'thick', 
    jam: 'blueberry' 
} 

Mein Dokument ist mit einem zusätzlichen cheese: [] Feld gespeichert. In meinem Schema wird Käse wie folgt definiert:

Mongoose.model('Food', { 
    ... 
    cheese: { 
     type: [{ type: Mongoose.Schema.ObjectId, ref: 'Cheese' }], 
     required: false 
    }, 
    ... 
}); 

ich geprüft, ob Mongo das Dokument benötigt ein Array-Feld als leer bei $push in Aktualisierung verwendet vorgegeben zu haben - es funktioniert nicht. Die Frage ist also: Wie vermeide ich das Hinzufügen eines leeren Array-Felds zu meinem Dokument beim Speichern?

+1

Es hängt von Ihrem Schema, wenn Ihr Schema ein Array definiert darin hat, wird es ein leeres Array tho an der Erstellung von Dokumenten zu erstellen. Wenn Sie mit zwei Versionen der Sammlung spielen möchten (eine mit Käse, eine ohne), erstellen Sie zwei Versionen des Schemas [siehe hier] (https://stackoverflow.com/questions/14453864/use-more-than-one -schema-per-sammlung-auf-mongodb) –

+1

Danke, es hilft. – wscourge

+0

Also hast du etwas gefunden?Ich bin wirklich interessiert –

Antwort

5

Wenn Sie das Dokument, Mungo Blick auf das Schema der zugehörigen Sammlung speichern.

Es nimmt alle Felder, die Sie es geben und die Werte einrichten. Es erstellt auch Standardwerte für die Felder, für die Sie nichts bereitgestellt haben.

, dass das Verhalten von Mungo ist.


In Ihrem Fall, was können wir tun?

We gonna zwei Schemata erstellen, um die gleiche Sammlung zusammen. Einer mit dem Feldkäse und einer ohne. Wenn Sie also ein neues Dokument mit dem Schema ohne cheese speichern, wird es nicht erstellt.


In der Praxis wird die Sammlung zwei verschiedene Dokumenttypen enthalten.

Here is a link about using multiple schema related to a single collection