RavenDB Projection Sample
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using Raven.Abstractions.Indexing; | |
using Raven.Client; | |
using Raven.Client.Document; | |
using Raven.Client.Indexes; | |
using Raven.Client.Linq; | |
namespace RavenDBProjectionTest | |
{ | |
internal class Program | |
{ | |
private static void Main(string[] args) | |
{ | |
var documentStore = (new DocumentStore | |
{ | |
Url = "http://localhost:8080" | |
}).Initialize(); | |
SetupData(documentStore); | |
IndexCreation.CreateIndexes(typeof(GameServers_ConnectedUsers).Assembly, documentStore); | |
using (var session = documentStore.OpenSession()) | |
{ | |
var results = | |
session.Query<GameServers_ConnectedUsers.IndexResult, GameServers_ConnectedUsers>() | |
.Where(x => x.UserName.StartsWith("b")) | |
.AsProjection<GameServers_ConnectedUsers.IndexResult>() | |
.ToList(); | |
foreach (var reduceResult in results) | |
{ | |
Console.WriteLine(reduceResult.ServerName + " - " + reduceResult.ServerName); | |
} | |
} | |
Console.ReadKey(); | |
} | |
private static void SetupData(IDocumentStore documentStore) | |
{ | |
using (IDocumentSession documentSession = documentStore.OpenSession()) | |
{ | |
documentSession.Store(new GameServer | |
{ | |
ServerName = "3FL CS #4", | |
ConnectedUsers = new[] | |
{ | |
new GameServer.User | |
{ | |
DateConnected = DateTimeOffset.Parse("March 15, 2012 14:23"), | |
Name = "toaster", | |
UserId = "users/1" | |
}, | |
new GameServer.User | |
{ | |
DateConnected = DateTimeOffset.Parse("March 15, 2012 13:23"), | |
Name = "Bill", | |
UserId = "users/2" | |
}, | |
new GameServer.User | |
{ | |
DateConnected = DateTimeOffset.Parse("March 15, 2012 14:08"), | |
Name = "THE PUNISHER", | |
UserId = "users/5" | |
}, | |
new GameServer.User | |
{ | |
DateConnected = DateTimeOffset.Parse("March 15, 2012 13:18"), | |
Name = "Benny", | |
UserId = "users/8" | |
}, | |
new GameServer.User | |
{ | |
DateConnected = DateTimeOffset.Parse("March 15, 2012 13:46"), | |
Name = "(2)Player", | |
UserId = "users/13" | |
} | |
} | |
}); | |
documentSession.Store(new GameServer | |
{ | |
ServerName = "iPGN CS #01 Iceworld", | |
ConnectedUsers = new[] | |
{ | |
new GameServer.User | |
{ | |
DateConnected = DateTimeOffset.Parse("March 15, 2012 14:03"), | |
Name = "EggM^tt", | |
UserId = "users/4" | |
}, | |
new GameServer.User | |
{ | |
DateConnected = DateTimeOffset.Parse("March 15, 2012 13:59"), | |
Name = "legend | camper", | |
UserId = "users/12" | |
}, | |
new GameServer.User | |
{ | |
DateConnected = DateTimeOffset.Parse("March 15, 2012 12:44"), | |
Name = "Bob", | |
UserId = "users/3" | |
}, | |
new GameServer.User | |
{ | |
DateConnected = DateTimeOffset.Parse("March 15, 2012 14:12"), | |
Name = "DarkSide", | |
UserId = "users/7" | |
}, | |
new GameServer.User | |
{ | |
DateConnected = DateTimeOffset.Parse("March 15, 2012 15:31"), | |
Name = "Kalamity", | |
UserId = "users/11" | |
} | |
} | |
}); | |
documentSession.Store(new GameServer | |
{ | |
ServerName = "iPGN HLTV", | |
ConnectedUsers = new[] | |
{ | |
new GameServer.User | |
{ | |
DateConnected = DateTimeOffset.Parse("March 15, 2012 14:02"), | |
Name = "Fresh dinner", | |
UserId = "users/6" | |
}, | |
new GameServer.User | |
{ | |
DateConnected = DateTimeOffset.Parse("March 15, 2012 13:16"), | |
Name = "kobe", | |
UserId = "users/10" | |
}, | |
new GameServer.User | |
{ | |
DateConnected = DateTimeOffset.Parse("March 15, 2012 13:58"), | |
Name = "optiks", | |
UserId = "users/9" | |
} | |
} | |
}); | |
documentSession.SaveChanges(); | |
} | |
} | |
public class GameServer | |
{ | |
public string Id { get; set; } | |
public string ServerName { get; set; } | |
public IEnumerable<User> ConnectedUsers { get; set; } | |
public class User | |
{ | |
public string UserId { get; set; } | |
public string Name { get; set; } | |
public DateTimeOffset DateConnected { get; set; } | |
} | |
} | |
public class GameServers_ConnectedUsers : | |
AbstractIndexCreationTask<GameServer, GameServers_ConnectedUsers.IndexResult> | |
{ | |
public GameServers_ConnectedUsers() | |
{ | |
Map = servers => from s in servers | |
from y in s.ConnectedUsers | |
select new | |
{ | |
ServerName = s.ServerName, | |
UserName = y.Name, | |
DateConnected = y.DateConnected, | |
UserId = y.UserId | |
}; | |
Store(x => x.ServerName, FieldStorage.Yes); | |
Store(x => x.UserName, FieldStorage.Yes); | |
Store(x => x.DateConnected, FieldStorage.Yes); | |
Store(x => x.UserId, FieldStorage.Yes); | |
} | |
public class IndexResult | |
{ | |
public string ServerName { get; set; } | |
public string UserName { get; set; } | |
public DateTimeOffset DateConnected { get; set; } | |
public string UserId { get; set; } | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment