Skip to content

Instantly share code, notes, and snippets.

@phillip-haydon
Created March 4, 2012 11:50
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save phillip-haydon/1972646 to your computer and use it in GitHub Desktop.
Save phillip-haydon/1972646 to your computer and use it in GitHub Desktop.
RavenDB Projection Sample
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