3
  public class EngineInfo 
  {
    public int Id{get;set;}

    public int? AircraftId { get; set; }

    public string SerialNumber { get; set; }

    public int Position { get; set; }

    public string RegNumber { get; set; }
    }

// 上記のモデルを使用するコードは次のとおりです。このモデルには 17,000 のドキュメントがあります

       ravenSession.Store(new AuthorizationUser
        {
            Id = "Authorization/Users/1",
            Name = "user-1",
            Permissions =
                            {
                                new OperationPermission
                                    {
                                        Allow = true,
                                        Operation = "EngineInfos/View",
                                        Tags = "Company/100"
                                    }
                            }
        });

 1. var query = ravenSession.Query<EngineInfo>();    

// query.Count() をログに記録すると、すべてのドキュメント数が表示されます。つまり、17000 です。これは、前のステートメントで設定した承認を無視しています。上記のステートメントに where 句を追加すると機能し、正しいカウントが表示されます。しかし、ユーザーが権限を持っているすべてのドキュメントを取得したいと考えています。

 2. var query = ravenSession.Query<EngineInfo>().ToList();

これで、承認を考慮して正しいカウントが得られます。しかし問題は、Take(x) に言及しない限り、すべての結果が返されないことです。で試しました

   RavenQueryStatistics queryStats;
    query.Statistics(out queryStats); 


   queryStats.TotalResults 

私はまだ承認結果を得ることができませんでした。私はすべてのカウントを取得します。

すべてのレコードをロードせずにクエリ結果の TotalCount を見つける方法を教えてください。

私の要件は、すべてのエンジンを検索可能な ExtJS ページング グリッドに表示することです。ページ数を計算して表示するには、表示するレコードの総数を知る必要があります(ページ数は固定です)。

4

2 に答える 2

1

これは仕様によるものです。http://ravendb.net/docs/intro/safe-by-defaultを参照してください。

session.Query<Post>().Count()サーバー上のすべての投稿 session.Query<Post>().ToList().Count()の数を示し、クライアントにフェッチされた投稿の数を示します。

デフォルトでは、RavenDBはクエリに.Take(128)を適用して、ページングを実行し、デフォルトで安全にするように促します。それ以上を取得したい場合は、のように取得する量を指定する必要があります.Take(1024)が、デフォルトでは、サーバーは一度に1024を超えるアイテムを返しません。そうするようにサーバーを構成できますが、これはお勧めしません。とにかく、ユーザーは一度に多くの情報を処理できないため、ページングを使用する方がはるかに優れています。

于 2013-03-12T09:32:18.927 に答える
0

ご覧のとおり、Raven の QueryStatistics は Authorization バンドルを無視しています。これは Raven Google Group で報告されています

私が知る限り、この記事の執筆時点では、クエリに対して承認されたドキュメントの総数を取得する信頼できる方法はありません。Authorization バンドルには、これに対する何らかのサポートを含める必要があるように思えます。

詳細を調べて、この回答を更新します。

于 2013-04-25T21:40:40.137 に答える