public void Can_compile_map_reduce_using_linq_methods() { var viewGenerator = new DynamicViewCompiler("test", new IndexDefinition { Map = @"docs.Users .Select(user => new {Location = user.Location, Count = 1})", Reduce = @"results .GroupBy(agg => agg.Location) .Select(g => new {Location = g.Key, Count = g.Sum(x => x.Count)})" }, ".").GenerateInstance(); var source = viewGenerator.MapDefinitions[0](new[] { GetDocumentFromString( @" { '@metadata': {'Raven-Entity-Name': 'Users', '@id': 1}, 'Location': 'Tel Aviv' }"), GetDocumentFromString( @" { '@metadata': {'Raven-Entity-Name': 'Users', '@id': 1}, 'Location': 'Tel Aviv' }") }).ToArray(); var results = viewGenerator.ReduceDefinition(source).Cast <object>().ToArray(); var expected = new[] { "{ Location = Tel Aviv, Count = 2 }", }; for (var i = 0; i < results.Length; i++) { Assert.Equal(expected[i], results[i].ToString()); } }
public void CanExecuteTheTransformResultFunction() { var answersIndex = new Answers_ByAnswerEntity2 { Conventions = new DocumentConvention() }; IndexDefinition indexDefinition = answersIndex.CreateIndexDefinition(); var dynamicViewCompiler = new DynamicViewCompiler("test", indexDefinition, "."); AbstractViewGenerator abstractViewGenerator = dynamicViewCompiler.GenerateInstance(); using (var documentStore = NewDocumentStore()) { Guid questionId = Guid.NewGuid(); Guid answerId = Guid.NewGuid(); using (IDocumentSession session = documentStore.OpenSession()) { var user = new User { Id = @"user/222", DisplayName = "John Doe" }; session.Store(user); var question = new Question2 { Id = questionId, Title = "How to do this in RavenDb?", Content = "I'm trying to find how to model documents for better DDD support.", UserId = @"user/222" }; session.Store(question); var answer = new AnswerEntity2 { Id = answerId, Question = question, Content = "This is doable", UserId = user.Id }; answer.Votes = new[] { new AnswerVoteEntity2 { Id = Guid.NewGuid(), QuestionId = questionId, Answer = answer, Delta = 2 } }; session.Store(new Answer2 { Id = answerId, UserId = user.Id, QuestionId = question.Id, Content = "This is doable", Votes = new[] { new AnswerVote2 { Id = Guid.NewGuid(), QuestionId = questionId, AnswerId = answerId, Delta = 2 } } }); session.SaveChanges(); } documentStore.DocumentDatabase.TransactionalStorage.Batch(accessor => { var documentRetriever = new DocumentRetriever(accessor, new OrderedPartCollection <AbstractReadTrigger>(), documentStore.DocumentDatabase.TransactionalStorage .GetInFlightTransactionalState( documentStore.DocumentDatabase.Documents.Put, documentStore.DocumentDatabase.Documents.Delete)); var dynamicJsonObjects = new[] { new DynamicJsonObject(accessor.Documents.DocumentByKey("answer2s/" + answerId.ToString(), null).ToJson()), }; var transformResultsDefinition = abstractViewGenerator.TransformResultsDefinition(documentRetriever, dynamicJsonObjects ); transformResultsDefinition.ToArray(); }); } }