2013-03-05 3 views
0

Я пытаюсь построить карту/уменьшить, что подсчитывает количество документов за определенный час.Как правильно построить карту/уменьшить, чтобы подсчитывать документы по часам?

Код я пытаюсь это

public class Syslog_DocumentCountByHour : AbstractMultiMapIndexCreationTask<Syslog_DocumentCountByHour.ReduceResult> { 

    public class ReduceResult { 
     public string Source { get; set; } 
     public DateTime Day { get; set; } 
     public DateTime Hour { get; set; } 
     public int Count { get; set; } 
    } 

    public Syslog_DocumentCountByHour() { 
     AddMap<SysLog>(docs => from doc in docs 
           select new { 
            Source = "CountByHour", 
            Day = doc.UtcDateTime.Day.ToString(), 
            Hour = doc.UtcDateTime.Hour.ToString(), 
            Count = 1 
           }); 

     Reduce = results => from result in results 
          group result by new { result.Hour } 
           into g 
           select new {g.Key.Hour, Count = g.Sum(x => x.Count) }; 
    } 
} 

Но Ворон бросает ошибку

System.InvalidOperationException: Невозможно понять запрос,

"$type": "System.InvalidOperationException, mscorlib", 
"ClassName": "System.InvalidOperationException", 
"Message": "Url: \"/indexes/Syslog/DocumentCountByHour\"\r\n\r\nSystem.InvalidOperationException: Could not understand query: \r\ndocs.SysLogs.Select(doc => new {\r\n Source = \"CountByHour\",\r\n Day = doc.UTC Date/Time.Day.ToString(),\r\n Hour = doc.UTC Date/Time.Hour.ToString(),\r\n Count = 1\r\n}) ---> System.InvalidOperationException: Could not understand query: \r\n[DomRegion FileName=, Begin=(3, 18), End=(-1, -1)]: Error - Unexpected symbol `Date'\r\n[DomRegion FileName=, Begin=(4, 19), End=(-1, -1)]: Error - Unexpected symbol `Date'\r\n at Raven.Database.Linq.QueryParsingUtils.GetVariableDeclarationForLinqMethods(String query, Boolean requiresSelectNewAnonymousType) in c:\\Builds\\RavenDB-Stable\\Raven.Database\\Linq\\QueryParsingUtils.cs:line 152\r\n --- End of inner exception stack trace ---\r\n at Raven.Database.Linq.QueryParsingUtils.GetVariableDeclarationForLinqMethods(String query, Boolean requiresSelectNewAnonymousType) in c:\\Builds\\RavenDB-Stable\\Raven.Database\\Linq\\QueryParsingUtils.cs:line 196\r\n at Raven.Database.Linq.DynamicViewCompiler.TransformMapDefinitionFromLinqMethodSyntax(String query, String& entityName) in c:\\Builds\\RavenDB-Stable\\Raven.Database\\Linq\\DynamicViewCompiler.cs:line 404\r\n at Raven.Database.Linq.DynamicViewCompiler.HandleMapFunction(ConstructorDeclaration ctor, String map) in c:\\Builds\\RavenDB-Stable\\Raven.Database\\Linq\\DynamicViewCompiler.cs:line 169\r\n at Raven.Database.Linq.DynamicViewCompiler.TransformQueryToClass() in c:\\Builds\\RavenDB-Stable\\Raven.Database\\Linq\\DynamicViewCompiler.cs:line 132\r\n at Raven.Database.Linq.DynamicViewCompiler.GenerateInstance() in c:\\Builds\\RavenDB-Stable\\Raven.Database\\Linq\\DynamicViewCompiler.cs:line 556\r\n at Raven.Database.Storage.IndexDefinitionStorage.AddAndCompileIndex(IndexDefinition indexDefinition) in c:\\Builds\\RavenDB-Stable\\Raven.Database\\Storage\\IndexDefinitionStorage.cs:line 153\r\n at Raven.Database.Storage.IndexDefinitionStorage.CreateAndPersistIndex(IndexDefinition indexDefinition) in c:\\Builds\\RavenDB-Stable\\Raven.Database\\Storage\\IndexDefinitionStorage.cs:line 138\r\n at Raven.Database.DocumentDatabase.PutIndex(String name, IndexDefinition definition) in c:\\Builds\\RavenDB-Stable\\Raven.Database\\DocumentDatabase.cs:line 1070\r\n at Raven.Database.Server.Responders.Index.Put(IHttpContext context, String index) in c:\\Builds\\RavenDB-Stable\\Raven.Database\\Server\\Responders\\Index.cs:line 83\r\n at Raven.Database.Server.HttpServer.DispatchRequest(IHttpContext ctx) in c:\\Builds\\RavenDB-Stable\\Raven.Database\\Server\\HttpServer.cs:line 856\r\n at Raven.Database.Server.HttpServer.HandleActualRequest(IHttpContext ctx) in c:\\Builds\\RavenDB-Stable\\Raven.Database\\Server\\HttpServer.cs:line 601\r\n", 

Любая помощь был бы весьма признателен.

+0

Похоже, что он может жаловаться из-за модели '[JsonProperty (PropertyName =" UTC Date/Time ")]' –

ответ

0

Я могу подтвердить, что неудача здесь был PropertyName набор с помощью JsonPropertyAttribute

Изменение

[JsonProperty(PropertyName = "UTC Date/Time")] 
    public DateTime UtcDateTime { get; set; } 

в

public DateTime UtcDateTime { get; set; } 

Остановилась ошибку из броска. Очевидно, RavenDB не любит пробелы.

+1

Мое предположение заключается в том, что передняя косая черта вызывает проблему для ключа json (имя свойства). http://stackoverflow.com/questions/1580647/json-why-are-forward-slashes-escaped. Я бы подумал, что пространство будет обработано. –

Смежные вопросы