2017-07-11 1 views
1

Ich habe Entitäten in sehr verschachtelter JSON, die bereits das normalizr Format folgen, wo die idAttribute ist bereits der Schlüssel in dem das Objekt definiert ist:Normalizr - Wie verschachtelte Einheiten behandeln, die bereits normalisiert sind

groups: [{ 
    id: 'foo', 
    families: { 
    smiths: { 
     people: [{ 
     id: 'sam', 
     }, { 
     id: 'jake', 
     }], 
    }, 
    jones: { 
     people: [{ 
     id: 'john', 
     }, { 
     id: 'sue', 
     }], 
    }, 
    }, 
}]; 

In diesem Beispiel Beachten Sie, dass das families Attribut die ID (smiths, jones) verwendet, um die people zu identifizieren, die ein Array von Objekten mit IDs sind.

Die Schemata für diese aussehen könnte:

const person = new Entity('person'); 
const family = new Entity('family', { 
    people: [person], 
}, {idAttribute: ???}); 
const group = new Entity('family', { 
    family: [family], 
}); 

FRAGE: Gibt es eine Möglichkeit, dass ein idAttribute Schema angeben, der Schlüssel ist, wo sie definiert ist? Mit anderen Worten, wie würde ich das Schema für Family definieren, da es sich auf groups und people bezieht?

Eine andere Frage, gibt es einen Weg zu denormalize einen abgeflachten Zustand, so dass die Familien families: {[id]: obj} Muster bleibt gleich wie es in dem Beispiel Json oben ist?

Antwort

2

Gibt es eine Möglichkeit anzugeben, dass das IDAttribute eines Schemas der Schlüssel ist, wo es definiert ist?

Ja. Die idAttribute-Funktion benötigt 3 Argumente: value, parent und key. Bitte lesen Sie die docs. In Ihrem Fall können Sie die key, zusammen mit schema.Values

const family = new schema.Entity('families', { 
    people: [ person ] 
}, (value, parent, key) => key); 
const families = new schema.Values(family); 
const group = new schema.Entity('groups', { 
    families 
}); 

Für denormalize, verwenden Sie ein separates Schema für family brauchen werden, da die ID nicht aus dem Schlüssel abgeleitet werden kann.

+0

Dies gibt 'Familien' als Schlüssel, nicht die 'Smiths' oder 'Jones' Werte Ich bin nach –

+0

Sorry, falsch gelesen und vergessen Sie müssen 'schema.Values' auf das Objekt der Familien verwenden –

+0

Gibt es eine Möglichkeit Familien nicht als Objekt zurückgeben? Derzeit bekommen wir 'Familien: {smiths: 'Smiths', jones: 'jones'}' was etwas ist, mit dem wir arbeiten können, wäre aber nett, wenn Familien als Array zurückgegeben würde: 'families: ['smiths', ' Jones '] ' –

Verwandte Themen