2010-09-28 7 views
9

Bisher habe ich versucht, die folgenden:Wie in RavenDB Alle Dokumente eines Typs auswählen

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); 
      } 
     } 
    } 
} 

ich in der Lage gewesen, alle zu laden, indem Sie einen Index hinzufügen und dann diesen Index als Abfrage:

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. 

gibt es eine Möglichkeit, nur alle Dokumente vom Typ erhalten Widget ohne einen Index erstellen zu müssen?

An diesem Punkt spiele ich nur mit RavenDB in einer Sandbox-Umgebung. Ich weiß, dass dies normalerweise nicht der beste Ansatz zum Abrufen von Daten ist.

Antwort

10

Ja

die DocumentsByName Abfrage verwenden - dies soweit ich arbeiten kann, nicht intuitiv in der Client-Schnittstelle im Moment ist, aber so etwas wie folgt aussieht:

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

Es hilft, wenn Sie kenne die HTTP API manchmal :)

NB: Beachte wie es für dich pluralisiert, das ist eine Konvention und kann überschrieben werden.

Hinweis: In der instabilen Gabel (so wahrscheinlich bald stabil sein, kann die oben leicht mit

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

Viel schöner

erreicht werden