2012-10-12 2 views
0

Je suis totalement nouveau sur MongoDB, et je suis confus sur la façon de structurer les données. Ce que je dois faire est de stocker un ensemble d'objets qui peuvent être récupérés par des clés différentes. Par exemple, j'ai l'objet "CustomerInfo" et il peut être référencé par les clés "Customer1", "Customer_1", "Cust.1", "Customer 1" et ainsi de suite.Conception de MongoDB - Même document avec plusieurs clés

Dans un RDMBS, je créer une table distincte pour stocker les alias et avoir une seule ligne pour les données d'informations client. Ensuite, je les rejoins, en utilisant l'alias que je reçois du client, et j'arrive aux données. Cela semble simple et direct, mais jusqu'à présent, je n'ai pas réussi à créer une base de données vide. Il semble que mon expérience avec RDBMS soit plus un obstacle qu'un atout dans ce cas, car j'ai tendance à "penser relationnel" et cela (évidemment) ne s'applique pas aux bases de données NoSQL.

Toute suggestion est la bienvenue, merci d'avance pour toutes les réponses.

Répondre

4

Si vous ne pouvez pas traduire à partir d'un alias à un ID réel à l'intérieur de votre application (qui est toujours préféré) une option consiste à stocker simplement un tableau « Alias ​​» dans vos documents de MongoDB et index que:

Stocker les documents comme ceci:

db.customers { 
    aliases : ["Customer1", "Customer_1", "Cust.1", "Customer 1"], 
    ...other customer info data... 
} 

Ajoutez votre index:

db.customers.ensureIndex({aliases:1}) 

Et puis simplement interroger sur l'un d'eux, tous ceux-ci reviendront le document ci-dessus:

db.customers.find({aliases: "Customer1"}) 
db.customers.find({aliases: "Customer_1"}) 
db.customers.find({aliases: "Cust.1"}) 
db.customers.find({aliases: "Customer 1"}) 

L'index est facultatif mais améliorera considérablement les performances.

+0

Cette réponse est correcte. Dans la plupart des cas où vous avez une relation un-à-plusieurs, comme dans ce cas un clientInfo ayant de nombreux alias, c'est la meilleure solution pour intégrer les many-objects en tant que tableau dans l'un-objet. Je pourrais seulement penser à deux cas où vous devriez employer des références au lieu de l'incorporation: (a) vous pourriez approcher les 16 Mo par limite de document ou (b) vous modifiez ou interrogez les objets-enfants en dehors du contexte de l'objet-parent . – Philipp

+0

Merci pour la réponse, cela semble une bonne solution. Pour répondre à votre question, je * peux * traduire un pseudonyme en un identifiant et, en fait, c'est ce que je fais avec le RBMS. Un ID de ligne CustomerData -> plusieurs alias. – Diego

+0

@Philipp: l'objet client * sera * modifié extérieurement indépendamment des alias, comme cela arrive toujours dans une relation un à plusieurs. Les alias resteront les mêmes (la plupart d'entre eux sont des valeurs héritées, qui ne changeront pas), les informations client changeront. Suggérez-vous que je devrais regarder dans l'utilisation de références, dans un tel cas? – Diego

Questions connexes