当我在我的应用程序中尝试比较MapReduce结果中的日期属性时,我得到一个奇怪的行为 .
var queryDate = DateTime.Now.Date;
IQueryable<VisitsByMediaSourceAndVersion.MapReduceResult> queryable =
_documentSession
.Query<MyIndex.MapReduceResult>(MyIndex.INDEX_NAME)
.Where(mapReduceResult => mapReduceResult.Date == queryDate);
var count = queryable.Count(),
调用queryable.Count()时,抛出异常 . 查看异常中的URL,似乎生成“Date:2012-08-22T00:00:00.0000000”作为查询参数,然后RavenDB-client将“22T00:”解释为索引中的新字段名称 .
System.InvalidOperationException未被用户代码Message = Url处理:“/ index / VisitsByMediaSourceAndVersion?query = Date%253A2012-08-> 22T00%251A00%253A00.0000000&start = 0&pageSize = 0 &aggregation = No”
为什么是这样?有工作吗?我是唯一有这个问题的人吗?
我无法在RavenDB的EmbeddableDocumentStore版本中重新创建此问题,这有意义吗?如果我删除日期查询它返回结果,所以索引本身可以工作 .
使用RavenDB Client 1.2.0.0和Server 960 .
感谢所有人的帮助!
完整堆栈跟踪:
System.InvalidOperationException未被用户代码Message = Url处理:“/ index / VisitsByMediaSourceAndVersion?query = Date%251A2012-08-22T00%251A00%253A00.0000000&start = 0&pageSize = 0 &aggregation = No”
System.ArgumentException:字段'22T00'未编入索引,无法在c:\ Builds \ RavenDB-Stable \ Raven.Database \ Indexing \ Index中的Raven.Database.Indexing.Index.IndexQueryOperation.AssertQueryDoesNotContainFieldsThatAreNotIndexes()中未编入索引的字段进行查询.cs:在System.Linq.Enumerable的c:\ Builds \ RavenDB-Stable \ Raven.Database \ Indexing \ Index.cs:第635行的Raven.Database.Indexing.Index.IndexQueryOperation.d_2e.MoveNext()中的第819行 . 位于System.Collections.Generic.List 1.InsertRange(Int32 index, IEnumerable
1集合中的WhereSelectEnumerableIterator 2.MoveNext() at System.Linq.Enumerable.WhereSelectEnumerableIterator
2.MoveNext(),位于c:\ Builds \ RavenDB-Stable \ Raven.Database \ DocumentDatabase中的Raven.Database.DocumentDatabase . <> c_DisplayClass82.b__78(IStorageActionsAccessor actions) .cs:在Raven.Database.DocumentDatabase的c:\ Builds \ RavenDB-Stable \ Raven.Storage.Esent \ TransactionalStorage.cs:第337行的Raven.Storage.Esent.TransactionalStorage.ExecuteBatch(Action 1 action) in c:\Builds\RavenDB-Stable\Raven.Storage.Esent\TransactionalStorage.cs:line 376 at Raven.Storage.Esent.TransactionalStorage.Batch(Action
1 action)中的第838行 . 查询(String index,IndexQuery查询)在c:\ Builds \ RavenDB-Stable \ Raven.Database中\ DocumentDatabase.cs:第7行:Raven.Database.Server.Responders.Index.PerformQueryAgainstExistingIndex(IHttpContext context,String index,IndexQuery indexQuery,Guid&indexEtag)在c:\ Builds \ RavenDB-Stable \ Raven.Database \ Server \ Responders \ Index.cs:位于c:\ Builds \ RavenDB-Stable \ Raven.Database \ Server \ Responders \ Index.cs中的Raven.Database.Server.Responders.Index.ExecuteQuery(IHttpContext context,String index,Guid&indexEtag)的第214行: Raven.Database.Database.Responders中的Raven.Database.Server.Responders.Index.GetIndexQueryRessult(IHttpContext context,String index)中的第179行:Raven.Database中的c:\ Builds \ RavenDB-Stable \ Raven.Database \ Server \ Responders \ Index.cs:第119行 . Server.Responders.Index.OnGet(IHttpContext context,String index)位于c:\ Builds \ RavenDB-Stable \ Raven.Database \ Server \ Responders \ Index.cs:第91行,位于Raven.Database.Server.Responders.Index.Respond (IHttpContext context)位于c:\ Builds \ RavenDB-Stable \ Raven.Database \ Server \ Responders \ Index.cs:第46行,位于Raven.Database.Server.HttpServer.DispatchRequest(IHttpContex)在c:\ Builds \ RavenDB-Stable \ Raven.Database \ Server \ HttpServer.cs中的c ctx:位于c:\ Builds \ RavenDB-Stable \ Raven中Raven.Database.Server.HttpServer.HandleActualRequest(IHttpContext ctx)的第550行.Database \ Server \ HttpServer.cs:第316行
Source = Raven.Client.Lightweight StackTrace:位于c:\ Builds \ RavenDB-Unstable-v1.2 \ Raven.Client.Lightweight \ Connection \ HttpJsonRequest.cs中的Raven.Client.Connection.HttpJsonRequest.HandleErrors(WebException e):line 422在Raven.Client.Connection.HttpJsonRequest.ReadJsonInternal(Func 1 getResponse) in c:\Builds\RavenDB-Unstable-v1.2\Raven.Client.Lightweight\Connection\HttpJsonRequest.cs:line 292 at Raven.Client.Connection.HttpJsonRequest.ReadResponseJson() in c:\Builds\RavenDB-Unstable-v1.2\Raven.Client.Lightweight\Connection\HttpJsonRequest.cs:line 202 at Raven.Client.Connection.ServerClient.DirectQuery(String index, IndexQuery query, String operationUrl, String[] includes) in c:\Builds\RavenDB-Unstable-v1.2\Raven.Client.Lightweight\Connection\ServerClient.cs:line 745 at Raven.Client.Connection.ServerClient.<>c__DisplayClass43.<Query>b__42(String u) in c:\Builds\RavenDB-Unstable-v1.2\Raven.Client.Lightweight\Connection\ServerClient.cs:line 727 at Raven.Client.Connection.ReplicationInformer.TryOperation[T](Func
2操作,String operationUrl,Boolean avoidThrowing,T&result)中c:\ Builds \ RavenDB-Unstable-v1.2 \ Raven.Client.Lightweight \ Connection \ ReplicationInformer . cs:第548行在Raven.Client.Connection.ReplicationInformer.ExecuteWithReplication [T](String方法,String primaryUrl,Int32 currentRequest,Int32 currentReadStripingBase,Func 2 operation) in c:\Builds\RavenDB-Unstable-v1.2\Raven.Client.Lightweight\Connection\ReplicationInformer.cs:line 520 at Raven.Client.Connection.ServerClient.ExecuteWithReplication[T](String method, Func
2操作)中c:\ Builds \ RavenDB-Unstable-v1.2 \ Raven .Client.Lightweight \ Connection \ ServerClient.cs:在Raven.Client.Connection.ServerClient.Query(String index,IndexQuery query,String [] includes)中的第165行在c:\ Builds \ RavenDB-Unstable-v1.2 \ Raven中.Client.Lightweight \ Connection \ ServerClient.cs:Raven.Client.Document.AbstractDocumentQuery 2.ExecuteActualQuery() in c:\Builds\RavenDB-Unstable-v1.2\Raven.Client.Lightweight\Document\AbstractDocumentQuery.cs:line 462 at Raven.Client.Document.AbstractDocumentQuery
中的第727行.2 .InitSy nc()在c:\ Builds \ RavenDB-Unstable-v1.2 \ Raven.Client.Lightweight \ Document \ AbstractDocumentQuery.cs:第444行在Raven.Client.Document.AbstractDocumentQuery 2.get_QueryResult() in c:\Builds\RavenDB-Unstable-v1.2\Raven.Client.Lightweight\Document\AbstractDocumentQuery.cs:line 430 at Raven.Client.Linq.RavenQueryProviderProcessor
1.GetQueryResult [TProjection](IDocumentQuery 1 finalQuery) in c:\Builds\RavenDB-Unstable-v1.2\Raven.Client.Lightweight\Linq\RavenQueryProviderProcessor.cs:line 1456 at Raven.Client.Linq.RavenQueryProviderProcessor
1 .ExecuteQueryTProjection在c:\ Builds \ RavenDB-Unstable-v1.2 \ Raven.Client.Lightweight \ Linq \ RavenQueryProviderProcessor.cs:第1376行Raven.Client.Linq.RavenQueryProviderProcessor 1.Execute(Expression expression) in c:\Builds\RavenDB-Unstable-v1.2\Raven.Client.Lightweight\Linq\RavenQueryProviderProcessor.cs:line 1359 at Raven.Client.Linq.RavenQueryProvider
1.Execute(表达式表达式)在c:\在Raven.Client.Linq.RavenQueryProvider中构建\ RavenDB-Unstable-v1.2 \ Raven.Client.Lightweight \ Linq \ RavenQueryProvider.cs:第138行 1.System.Linq.IQueryProvider.Execute[S](Expression expression) in c:\Builds\RavenDB-Unstable-v1.2\Raven.Client.Lightweight\Linq\RavenQueryProvider.cs:line 183 at System.Linq.Queryable.Count[TSource](IQueryable
1来源)位于C:\ Development \ Git \ MediaIngenuity \ TotallyMoney.CreditCards \ TotallyMoney.CreditCards.Admin.Web \ Controllers \ DailyReportController.cs中的TotallyMoney.CreditCards.Admin.Web.Controllers.DailyReportController.Report(ReportPostModel reportPostModel): System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext,IDictionary 2 parameters) at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary
2参数)中System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase控制器,Object []参数)的lambda_method(Closure,ControllerBase,Object [])第33行)System.Web.Mvc.ControllerActionInvoker . <> c_DisplayClass15.b_12()在System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter过滤器,ActionExecutingContext preContext,Func`1 continuation)InnerException:
2 回答
发生此异常的原因是您对1.0服务器使用1.2(现在为2.0)客户端 . 这不受支持 .
您可以将较旧的客户端与较新的服务器一起使用,但不能反过来使用 .
如果它生成了正确的日期并且之后不需要其余的数据,您是否可以使用子字符串仅提取日期,或者可能使用方法queryable.Count()周围的GetDate()?