2012-06-18 6 views
0

Je développe une application Ruby on Rails (3.2.6) et utilise MongoId (3.0.0) pour interagir avec la base de données MongoDB. Je me demande simplement comment enregistrer des objets JSON incorporés qui contiennent plusieurs niveaux et pas seulement un niveau.Comment créer un document multi-niveau en utilisant MongoId

J'ai obtenu une ancienne base de données MongoDB avec cette structure et simulaire, j'ai donc besoin d'enregistrer de nouveaux documents en utilisant la même structure.

C'est de la documentation et est utilisé pour ajouter un document un niveau:

Person.create(
    first_name: "Heinrich", 
    last_name: "Heine" 
) 

Comment puis-je ajouter un objet avec cette structure:

{ 
    "basic": { 
     "file_id": { 
      "file": "cf1952761a806c56c9bee60665418f02c" 
     }, 
     "share": false, 
     "status": "created" 
    }, 
    "data": { 
     "id": "4fd942dder5f5e88837300026e", 
     "name": "roberta", 
     "comment": "This is a comment" 
    } 
} 

Répondre

1

La meilleure façon Pour ce faire, créez des classes pour basic et data et intégrez-les dans votre document de premier niveau.

Les classes de documents incorporés sont définies dans Mongoid de la même manière que les autres documents avec un appel embedded_in et un embeds_one correspondant ou embeds_many dans le document de niveau supérieur.

L'autre option consiste simplement à définir un champ Hash, mais cela peut évidemment avoir n'importe quelle structure.

Class Person 
    include Mongoid::Document 

    field :data, :type => Hash 

    ... 
end 

:data acceptera tout hachage, même avec hash imbriqués.

+0

Ah ok. Fondamentalement, ce dont j'ai besoin est de pouvoir contrôler comment les données sont sauvegardées (hiérarchie/structure) dans un document. Créer une classe pour les bases et les données semble être exagéré car elles ne sont là que pour fournir une hiérarchie. Est-il possible que vous pourriez me montrer un exemple comment utiliser votre deuxième option (champ Hash)? Très reconnaissant! –

+0

Je pense que c'est bien d'avoir ces petites classes, surtout si vous essayez d'imposer une structure à vos données. Un hachage n'impose aucune structure. – Baruch

+0

Oui, vous avez raison. Mais j'ai seulement besoin d'utiliser des modèles pour eux, pas de contrôleurs? –

Questions connexes