Как выбрать все документы типа в RavenDB - PullRequest
9 голосов
/ 28 сентября 2010

Пока что я пробовал следующее:

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 в среде песочницы. Я понимаю, что обычно это не лучший подход к получению данных.

1 Ответ

11 голосов
/ 02 октября 2010

Да

используйте запрос DocumentsByName - насколько я могу понять, на данный момент он не интуитивно понятен в клиентском интерфейсе, а выглядит примерно так:

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

Это помогает, если вы знаете HTTP API иногда:)

NB. Обратите внимание, как это множественное число для вас, это соглашение и может быть отменено.

Примечание: В нестабильной вилке (которая, скорее всего, скоро станет стабильной, все вышеперечисленное может быть легко достигнуто с помощью

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

гораздо приятнее

...