首页 文章

RavenDB中日期查询的问题

提问于
浏览
3

当我在我的应用程序中尝试比较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 回答

  • 0

    发生此异常的原因是您对1.0服务器使用1.2(现在为2.0)客户端 . 这不受支持 .

    您可以将较旧的客户端与较新的服务器一起使用,但不能反过来使用 .

  • 2

    如果它生成了正确的日期并且之后不需要其余的数据,您是否可以使用子字符串仅提取日期,或者可能使用方法queryable.Count()周围的GetDate()?

相关问题