2014-02-09 5 views
6

Ich versuche, ein Schema Paradigma in MongoDB zu entwerfen, die mehrsprachige Werte für variable Attribute in Dokumenten unterstützen würde.Mehrsprachige Attribute in MongoDB

Zum Beispiel hätte ich einen Produktkatalog, in dem jedes Produkt seinen Namen, Titel oder jedes andere Attribut in verschiedenen Sprachen speichern muss. Das gleiche Paradigma sollte wahrscheinlich auch für andere länderspezifische Eigenschaften wie Preis/Währungsschwankungen halten

Ich habe unter Berücksichtigung eines Schlüssel-Wert-Ansatz, bei dem Schlüssel der Sprachcode ist und Wert ist der entsprechende Wert:

{ 
     sku: "1011", 
     name: { "en": "cheese", "de": "Käse", "es": "queso", etc... }, 
     price: { "usd": 30.95, "eur": 20, "aud": 40, etc... } 
} 

Das Problem ist, ich glaube, das würde mich von der Verwendung von Indizes in mehrsprachigen Feldern ablehnen. Schließlich möchte ich ein generisches, aber dennoch intuitives, indexfähiges Design.

Jeder Vorschlag wäre dankbar, danke.

+0

Was zu diesem Thema Ihre endgültige Wahl ist? @ChenR – calfzhou

+0

@calfzhou wow, ist es seitdem so lange :) – ChenR

+1

@calfzhou dass bestimmtes Projekt abrupt kurz nach dieser Frage geschnitten wurde, In einem anderen (Meteor) Projekt verwende ich dieses Muster: '' ' { sku: "1011", Name: "Käse", Farbe: "gelb", i18n: { "de": { Name: "Käse", Farbe: "gelb" } } } '' ' Dieses Muster in Meteor erlaubte mir, nur die gewünschte Sprache anzuzeigen, indem ich auf das Objekt 'i18n' der obersten Ebene verwies und die Eigenschaften der obersten Ebene durch diese insi ersetzte de das i18n-Objekt (wo verfügbar) z.B. product.name // == "Käse" im DE-Modus Egal, ich denke immer noch das ursprünglich gepostete Muster ist gut – ChenR

Antwort

4

Großhandel Empfehlungen über Ihre Schema-Design kann ein bisschen breit sein ein Thema für die Diskussion hier. Ich kann jedoch vorschlagen, dass Sie in Betracht ziehen, die Elemente, die Sie anzeigen, in ein Array von Unterdokumenten und nicht in ein einzelnes Unterdokument mit Feldern für jedes Element zu stellen.

{ 
    sku: "1011", 
    name: [{ "en": "cheese" }, {"de": "Käse"}, {"es": "queso"}, etc... ], 
    price: [{ "usd": 30.95 }, { "eur": 20 }, { "aud": 40 }, etc... ] 
} 

Der Hauptgrund dafür ist, Rücksicht auf Zugriffspfade auf Ihre Elemente, die Dinge einfacher Abfrage machen sollte. Das habe ich in einigen Details durchgegangen here, die es wert sind, gelesen zu werden.

Es könnte auch eine Möglichkeit, dies für so etwas wie Ihr Name Feld zu erweitern sein:

name: [ 
     { "lang": "en", "value": "cheese" }, 
     { "lang": "de", "value: "Käse" }, 
     { "lang": "es", "value": "queso" }, 
     etc... 
    ] 

Alle auf Indexierung und Zugriffsanforderungen abhängen. Alles hängt davon ab, was genau Ihre Anwendung benötigt und die Schönheit von MongoDB ist, dass Sie Ihre Dokumente nach Ihren Bedürfnissen strukturieren können.

P.S In Bezug auf alles, wo man Geld Werte speichern, empfehle ich Ihnen etwas zu lesen tun und beginnen vielleicht mit diesem Beitrag hier:

MongoDB - What about Decimal type of value?

+0

Funktioniert diese Lösung mit 'Indizes'? – calfzhou