Wie alle Dokumente eines Typ in RavenDB auswählen
Frage
Bisher habe ich versucht, die folgenden:
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 konnte alle laden, indem Sie einen Index hinzufügen und dann diesen Index als Abfrage mit:
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 Widget
zu erhalten, ohne einen Index erstellen zu müssen?
An diesem Punkt bin ich nur mit RavenDB in einer Sandbox-Umgebung zu spielen. Mir ist klar, dass dies in der Regel nicht der beste Ansatz Daten zu holen.
Lösung
Ja
verwenden, um die DocumentsByName Abfrage - dies soweit ich arbeiten können, nicht intuitiv in der Client-Schnittstelle im Moment ist, aber sieht etwas wie folgt aus:
documentSession.LuceneQuery<ImageDocument>("Raven/DocumentsByEntityName")
.Where("Tag:Widgets")
.Take(100)
.ToArray();
Es hilft, wenn Sie den HTTP-API wissen manchmal:)
NB:. Beachten Sie, wie es für Sie pluralises, das ist eine Konvention ist, und außer Kraft gesetzt werden kann
Hinweis: In der instabilen Gabel (so wahrscheinlich stabil bald sein, können die oben leicht erreicht werden durch
documentSession.Query<ImageDocument>().Take(100).ToArray()
Viel schöner