Как выбрать все документы типа 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);
}
}
}
}
Я смог загрузить все, добавив индекс, а затем использую этот индекс в качестве запроса:
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.
Есть ли способ просто получить все документы типа Widget
без необходимости создавать индекс?
На данный момент я просто играю с RavendB в среде песочницы. Я понимаю, что это обычно не лучший подход к получению данных.
Решение
да
Используйте запрос ProcessBYBYNAME - это, насколько я могу работать, не интуитивно понятен в клиентском интерфейсе на данный момент, но выглядит что-то подобное:
documentSession.LuceneQuery<ImageDocument>("Raven/DocumentsByEntityName")
.Where("Tag:Widgets")
.Take(100)
.ToArray();
Это помогает, если вы знаете HTTP API иногда :)
NB: Обратите внимание, как это плюяна для вас, это конвенция и может быть переопределена.
ПРИМЕЧАНИЕ: в нестабильной вилке (так скорее всего, будет стабильным в ближайшее время, приведенное выше может быть легко достигнуто с
documentSession.Query<ImageDocument>().Take(100).ToArray()
Намного приятнее