2013-07-05 12 views
20

In meinem Mongoose-Schema habe ich ein Feld, das eine Zeichenfolge ist, und ich möchte in der Lage sein, ein JSON-Objekt darin zu speichern. Ist es möglich? In Postgres ist es möglich, ein Wörterbuch in einer Stringspalte zu speichern.Speichern von Json-Objekt in Mongoose Zeichenfolgenschlüssel

Ich möchte das tun, weil das Wörterbuch (eigentlich ein JSON-Objekt in JS) ist nur ein einfacher Lese- und Schreib-Wert und benötigt keine Abfragen, sondern auch, weil es nur ein Wert und kein Array von Werten ist .

Antwort

66

Ja, Sie können einfach {myJsonProperty: JSON.stringify(myObject)} speichern. Hoffentlich wissen Sie, dass Sie auch einfach {myJsonProperty: Object} in Ihr Mungo-Schema setzen und das ganze Objekt speichern können, ohne es grundlos in eine Zeichenkette umzuwandeln. Es muss kein verschachteltes Dokument mit einem Schema sein, es kann nur ein einfaches JavaScript-Objekt sein.

+5

Ich kann nur ein Objekt speichern? Bist du sicher? Das wäre ideal für mich, aber Mongoose Docs erwähnt diesen Typ nicht. –

+7

Ja. Sie können auch den Typ "Mixed" verwenden, wenn Sie eine True-Go-Eigenschaft wünschen. https://github.com/LearnBoost/mongoose/blob/3.6.14/lib/schema/mixed.js –

+0

Sollte ich gemischt oder Objekt verwenden. Grundsätzlich möchte ich ein JSON-Objekt speichern. Also, was wäre besser? –

0

Die akzeptierte Antwort ist gut für die meisten Situationen.

Wenn Sie jedoch ein Objekt haben, das Sie speichern möchten, und Sie keine Kontrolle über die Objektschlüssel haben (z. B. könnten sie vom Benutzer gesendet werden), sollten Sie diese als string-fähigen JSON speichern. Auf diese Weise können Sie die von MongoDB auferlegte Beschränkung überwinden, die keys must not contain the reserved characters$ oder . ist.

Sie können dies mit Mongoose Getter und Setter erreichen, zum Beispiel:

data: { 
    type: String, 
    get: function(data) { 
    try { 
     return JSON.parse(data); 
    } catch() { 
     return data; 
    } 
    }, 
    set: function(data) { 
    return JSON.stringify(data); 
    } 
} 
6

, wenn Sie die Art Ihrer Feldform „String“ ändern können „Objekt“ können Sie die json speichern können, wie es ist.

var schema_obj = new Schema({ 
field1: Object, 
.. 
}); 
Verwandte Themen