2012-01-23 3 views
0

Je cherche à récupérer certaines données de MongoDB mais je ne suis pas sûr de la façon de le faire efficacement. Il se peut que ma structure de collection/document ne soit pas idéale et que je doive la stocker différemment. Tout conseil serait apprécié ..MongoDB - comment interroger ces données

J'ai deux collections - Les objets et vues

Objets

{ 
    "_id" : ObjectId("4f182ac3369a2b2603010000"), 
    "name" : "Object name", 
    "project_id" : "4f182a76369a2b2903000000" 
} 

vues d'objet

{ 
"_id" : ObjectId("4f182ac3369a2b2603010000"), 
    "2012" : { 
    "r" : 8, 
    "t" : 16, 
    "u" : 10, 
    } 
} 

Je veux récupérer 2012.r de 'Ob ject views pour tous les objets appartenant à un projet particulier.

Voici mes idées sur la façon de le faire:

  1. avez une question de trouver qui renvoie tous les documents de la collection « objet vues » qui correspondent au champ _id. Pour moi, cela ne semble pas efficace ou une façon ordonnée de faire les choses (imaginez s'il y avait 2000 objets ).
  2. Ajoutez le champ project_id à tous les documents 'vues d'objet', puis effectuez une requête de recherche pour sélectionner tous les documents correspondant à l'ID du projet. Est-il mal vu/efficace de sélectionner plusieurs documents (il pourrait y avoir aussi peu que 2 ou autant que 2000)?
  3. Créer une collection spécifiquement pour ce problème. Il contiendrait un document pour chaque projet, où chaque document spécifie toutes les instances d'objets appartenant à ce projet et les valeurs de 2012.r. Faites ensuite une requête de recherche pour sélectionner le document unique.

Des idées, des conseils ou des solutions de rechange seraient appréciés!

Répondre

1

Ajoutez le champ project_id à tous les « objet » vues documents, puis faire une requête de découverte pour sélectionner tous les documents qui correspondent à la project_id. Est- il a désapprouvé/efficace pour sélectionner plusieurs documents (il pourrait y avoir aussi peu que 2 ou autant que 2000)?

Certainement la façon de le faire (plus un index sur cette colonne), tant en termes de performance (db.object_views.find({project_id : "4f182a76369a2b2903000000" })) et le code & simplicité de requête.

Les chauffeurs font la mise en lots sous le capot, ce qui ne coûte rien si l'on récupère 2000 documents.

+0

Assez facile, merci! Comme vous le dites, en supposant qu'il y ait un index dessus, recommanderiez-vous de stocker project_id en ObjectId ou en string? – RichW

+1

J'utiliserais le même type que dans Object.project_id – milan

0

Si vous avez une solide expérience dans SQL, vous trouverez peut-être this Traducteur SQL-MongoDB utile:

Cependant, il manque des citations dans les paramètres quand il est nécessaire. Alors, surveillez-le.

Espérons que cela vous soit utile

Questions connexes