2016-07-21 7 views
4

Wir haben eine App für die Inhaltszustellung, in der wir Objekte in unserem JSON abstürzen, die eine dynamische Struktur haben. React Native verbraucht den JSON und baut die Benutzeroberfläche aus diesen Objekten auf.Realm.js: Unstrukturiertes Objekt als Eigenschaft speichern

Dies ist das Schema, das ich mit jetzt gerade arbeite:

const CardSchema = { 
    name: 'Card', 
    properties: { 
     id: 'string', 
     cardSubType: 'string', 
     cardType: 'string', 
     state: 'string', 
     contentType: 'string', 
     context: {}, 
    }, 
}; 

Das Feld context ist der dynamische Teil. Es ist im Grunde ein Objekt, das eine beliebige Anzahl von Feldern haben kann. Zum Zeitpunkt der Kompilierung wissen wir nicht, welche Felder sich dort befinden.

Wir würden gerne Realm.js verwenden, um unsere Daten zu persistieren, weil es nett und schnell ist und 99% unserer Objekte, die wir kompilieren können.

Es ist nur dieses ein Feld (und ein paar andere), dass wir jedes Objekt speichern möchten.

Ist dies mit Realm für React Native möglich? Oder müsste ich es als String modellieren und beim Laden und Deserialisieren beim Laden Serialisierung durchführen?

Antwort

3

Realm unterstützt noch keine Wörterbücher/dynamische Objekte. Dies ist definitiv etwas auf der Roadmap, da es sehr natürlich wäre, JSON-Objekte einfach speichern und abrufen zu können. Bis zur vollständigen Unterstützung für Wörterbücher müssen Sie Ihre Daten entweder wie angegeben als Zeichenfolge speichern oder ein eigenes JSON-Modell erstellen. So etwas wie

const UNDEFINEDTYPE = 0; 
const INTTYPE = 1; 
const STRINGTYPE = 2; 

const JSONValueSchema = { 
    name: 'JSONValue', 
    properties: { 
     type: 'int', 
     stringValue: { type: 'string', optional: true }, 
     intValue: { type: 'int', optional: true }, 
     jsonValue: { type: 'JSON', optional: true },   
    } 
}; 

const JSONEntrySchema = { 
    name: 'JSONEntry', 
    properties: { 
     key: 'string', 
     value: 'string' 
    } 
}; 

const JSONSchema = { 
    name: 'JSON', 
    properties: { 
     entries: { type: 'list', objectType: 'JSONEntry' } 
    } 
} 

Dadurch wird ein bisschen ausführlicher sein, aber es Ihnen erlauben würde, vollständig das Abfragesystem mit keyPath Abfragen verwendet werden, wo ein JSON-Blob zu speichern würde Sie zwingen CONTAINS Abfragen zu verwenden. Nicht sicher, ob sich der ganze Aufwand für Ihre Bewerbung lohnt.

+0

Danke. Auf der anderen Seite denke ich, dass der Aufwand gerechtfertigt wäre, da wir Dokumente mit mehreren Indizes für die Abfrageleistung speichern möchten. Daher würden wir das gesamte Dokument wahrscheinlich als serialisierte Zeichenfolge speichern und die Felder extrapolieren, die wir als Eigenschaften indizieren möchten. – hendrikswan