2010-09-28 14 views
9

Jusqu'à présent, j'ai essayé ce qui suit:Comment sélectionner tous les documents d'un type dans RavenDB

public class Widget 
{ 
    public int Id; 
    public string Name; 
} 

public static class Main 
{ 
    public static void Main() 
    { 
     // Initialize store and preload with widgets... 

     using (var session = store.OpenSession()) 
     { 
      var widgets = session.Load<Widget>(); 
      foreach(var widget in widgets) 
      { 
       Console.WriteLine(widget.Name); 
      } 
     } 
    } 
} 

Je suis en mesure de charger tout en ajoutant un index, puis en utilisant cet index comme une requête:

var store = new DocumentStore(); 
store.DatabaseCommands.PutIndex("AllWidgets", new IndexDefinition<Widget> 
{ 
    Map = widget => from widget in widgets 
        select new { widget } 
}); 

// Back in Main 
var widgets = session.Query<Widget>("AllWidgets"); 
// Do stuff with widgets. 

y at-il un moyen d'obtenir que tous les documents de type Widget sans avoir à créer un index?

À ce stade, je joue juste avec RavenDB dans un environnement de bac à sable. Je réalise que ce n'est généralement pas la meilleure approche pour récupérer des données.

Répondre

10

Oui

utiliser la requête DocumentsByName - ce pour autant que je peux travailler n'est pas intuitive dans l'interface client au moment, mais ressemble à ceci:

documentSession.LuceneQuery<ImageDocument>("Raven/DocumentsByEntityName") 
       .Where("Tag:Widgets") 
       .Take(100) 
       .ToArray(); 

Il aide si vous connaître l'API HTTP parfois :)

NB: Notez comment cela se pluralise pour vous, ceci est une convention et peut être outrepassé.

Note: Dans la fourchette instable (donc susceptible d'être bientôt stable, ce qui précède peut facilement être réalisé avec

documentSession.Query<ImageDocument>().Take(100).ToArray() 

Beaucoup plus agréable