3

MapReduce で日付プロパティを比較しようとすると、アプリケーションで 1 つの結果になり、奇妙な動作が発生します。

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 クライアントは "22T00:" をインデックス内の新しいフィールド名として解釈します。

System.InvalidOperationException はユーザー コードによって処理されませんでした。

どうしてこれなの?回避策はありますか?この問題を抱えているのは私だけですか?

この問題を RavenDB の EmbeddableDocumentStore バージョンで再現することはできません。それは理にかなっていますか? 日付クエリを削除すると結果が返されるため、インデックス自体が機能します。

RavenDB クライアント 1.2.0.0 およびサーバー 960 を使用します。

すべての助けに感謝します!

完全なスタック トレース:

System.InvalidOperationException がユーザー コードによって処理されませんでした。

System.ArgumentException: フィールド '22T00' はインデックスが作成されていないため、c:\Builds\RavenDB-Stable\Raven.Database\Indexing の Raven.Database.Indexing.Index.IndexQueryOperation.AssertQueryDoesNotContainFieldsThatAreNotIndexes() でインデックスが作成されていないフィールドに対してクエリを実行できません\Index.cs: Raven.Database.Indexing.Index.IndexQueryOperation.d_ 2e.MoveNext() の行 819 c:\Builds\RavenDB-Stable\Raven.Database\Indexing\Index.cs: System.Linq の行 635 .Enumerable.WhereSelectEnumerableIterator 2.MoveNext() at System.Linq.Enumerable.WhereSelectEnumerableIterator2.MoveNext() System.Collections.Generic.List 1.InsertRange(Int32 index, IEnumerable1 コレクション) で Raven.Database.DocumentDatabase.<>c _DisplayClass82.b__78(IStorageActionsAccessor アクション) in c:\Builds\RavenDB-Stable\Raven.Database \DocumentDatabase.cs:Raven.Storage.Esent.TransactionalStorage.ExecuteBatch(Action の 838 行目1 action) in c:\Builds\RavenDB-Stable\Raven.Storage.Esent\TransactionalStorage.cs:line 376 at Raven.Storage.Esent.TransactionalStorage.Batch(Action1 アクション) in c:\Builds\RavenDB-Stable\Raven.Storage.Esent\TransactionalStorage.cs:line 337 at Raven.Database.DocumentDatabase.Query(String index, IndexQuery query) in c:\Builds\RavenDB-Stable\ Raven.Database\DocumentDatabase.cs: c:\Builds\RavenDB-Stable\Raven.Database\Server の Raven.Database.Server.Responders.Index.PerformQueryAgainstExistingIndex(IHttpContext context, String index, IndexQuery indexQuery, Guid& indexEtag) の 781 行目\Responders\Index.cs: c:\Builds\RavenDB-Stable\Raven.Database\Server\Responders\Index の Raven.Database.Server.Responders.Index.ExecuteQuery(IHttpContext context, String index, Guid& indexEtag) の 214 行目.cs: c:\Builds\RavenDB-Stable\Raven.Database\Server\Responders\Index.cs の Raven.Database.Server.Responders.Index.GetIndexQueryRessult(IHttpContext context, String index) の 179 行目:c:\Builds\RavenDB-Stable\Raven.Database\Server\Responders\Index.cs の Raven.Database.Server.Responders.Index.OnGet(IHttpContext context, String index) の 119 行目: Raven.Database の 91 行目。 Server.Responders.Index.Respond(IHttpContext context) in c:\Builds\RavenDB-Stable\Raven.Database\Server\Responders\Index.cs:Raven.Database.Server.HttpServer.DispatchRequest(IHttpContext ctx) の 46 行目c:\Builds\RavenDB-Stable\Raven.Database\Server\HttpServer.cs: c:\Builds\RavenDB-Stable\Raven.Database\Server の Raven.Database.Server.HttpServer.HandleActualRequest(IHttpContext ctx) の行 550 \HttpServer.cs:316行目\Builds\RavenDB-Stable\Raven.Database\Server\Responders\Index.cs: c:\Builds\RavenDB-Stable\Raven.Database\Server の Raven.Database.Server.HttpServer.DispatchRequest(IHttpContext ctx) の 46 行目\HttpServer.cs: c:\Builds\RavenDB-Stable\Raven.Database\Server\HttpServer.cs:line 316 の Raven.Database.Server.HttpServer.HandleActualRequest(IHttpContext ctx) の行 550\Builds\RavenDB-Stable\Raven.Database\Server\Responders\Index.cs: c:\Builds\RavenDB-Stable\Raven.Database\Server の Raven.Database.Server.HttpServer.DispatchRequest(IHttpContext ctx) の 46 行目\HttpServer.cs: c:\Builds\RavenDB-Stable\Raven.Database\Server\HttpServer.cs:line 316 の Raven.Database.Server.HttpServer.HandleActualRequest(IHttpContext ctx) の行 550

Source=Raven.Client.Lightweight StackTrace: c:\Builds\RavenDB-Unstable-v1.2\Raven.Client.Lightweight\Connection\HttpJsonRequest.cs:line の Raven.Client.Connection.HttpJsonRequest.HandleErrors(WebException e) でc:\Builds\RavenDB-Unstable-v1.2\Raven.Client.Lightweight\Connection\ReplicationInformer.csの 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](Func2 操作、文字列 operationUrl、ブール値の avoidThrowing、T& 結果) での 422 : Raven.Client.Connection.ReplicationInformer.ExecuteWithReplication[T](String method, String primaryUrl, Int32 currentRequest, Int32 currentReadStripingBase, Func の 548 行目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, Func2 操作) in c:\Builds\RavenDB-Unstable-v1.2\Raven.Client.Lightweight\Connection\ServerClient.cs:line 165 at Raven.Client.Connection.ServerClient.Query(String index, IndexQuery query, String[ ] に含まれています) c:\Builds\RavenDB-Unstable-v1.2\Raven.Client.Lightweight\Connection\ServerClient.cs: 行 727 の 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.AbstractDocumentQuery2.InitSync() in c:\Builds\ RavenDB-Unstable-v1.2\Raven.Client.Lightweight\Document\AbstractDocumentQuery.cs: 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.RavenQueryProviderProcessor1.GetQueryResult[TProjection](IDocumentQuery 1 finalQuery) in c:\Builds\RavenDB-Unstable-v1.2\Raven.Client.Lightweight\Linq\RavenQueryProviderProcessor.cs:line 1456 at Raven.Client.Linq.RavenQueryProviderProcessor1.ExecuteQueryTProjection in c:\Builds\RavenDB-Unstable の444 行目-v1.2\Raven.Client.Lightweight\Linq\RavenQueryProviderProcessor.cs: Raven.Client.Linq.RavenQueryProviderProcessor の行 13761.Execute(Expression expression) in c:\Builds\RavenDB-Unstable-v1.2\Raven.Client.Lightweight\Linq\RavenQueryProviderProcessor.cs:line 1359 at Raven.Client.Linq.RavenQueryProvider1. Execute(式式) in c:\Builds\RavenDB-Unstable-v1.2\Raven.Client.Lightweight\Linq\RavenQueryProvider.cs:Raven.Client.Linq.RavenQueryProvider 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](IQueryable1 ソースの 138 行目) TotallyMoney.CreditCards でC:\Development\Git\MediaIngenuity\TotallyMoney.CreditCards\TotallyMoney.CreditCards.Admin.Web\Controllers\DailyReportController.cs の .Admin.Web.Controllers.DailyReportController.Report(ReportPostModel reportPostModel): lambda_method(Closure , ControllerBase の 33 行目、Object[] ) で System.Web.Mvc.ActionMethodDispatcher.Execute (ControllerBase コントローラー、Object[] パラメーター) で System.Web.Mvc.ReflectedActionDescriptor.Execute (ControllerContext controllerContext、IDictionary 2 parameters) at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary2 パラメーター) で System.Web.Mvc.ControllerActionInvoker .<>c_ DisplayClass15.bSystem.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter フィルター、ActionExecutingContext preContext、Func`1 継続) での _12() InnerException:

4

2 に答える 2

2

この例外は、1.0 サーバーに対して 1.2 (現在は 2.0) クライアントを使用していたために発生しました。これはサポートされていません。

古いクライアントを新しいサーバーで使用できますが、その逆はできません。

于 2013-02-07T23:48:55.893 に答える
0

正しい日付を生成していて、後で残りのデータが必要ない場合は、部分文字列を使用して日付のみを取得するか、メソッド queryable.Count() の周りで GetDate() を使用できますか?

于 2012-11-13T23:57:25.390 に答える