以下のように、DatabaseCommands IndexQuery の外でクエリを作成し、Query.ToString() を使用して IndexQuery クエリ文字列を設定できます。
var query = session.Advanced.LuceneQuery<Asset, AssetsByExpirationDate>()
.WhereBetween("ExpirationDate",DateTime.MinValue,new DateTime(2012, 6, 1));
var queryString = query.ToString();
session.Advanced.DatabaseCommands.DeleteByIndex(typeof(AssetsByExpirationDate).Name, new IndexQuery
{
Query = queryString
});
この方法を使用し、lucene クエリ構文にあまり慣れていない場合、RavenDb クエリ API は、前に示したように .ToString() を呼び出して構築し、次の Lucene 形式のクエリ文字列を取得します。
ExpirationDate:{00010101000000000 TO 20120601000000000}
DatabaseCommands を使用した削除は、古いインデックスでは機能しないことに注意してください。そのため、注意するか、標準の lucene クエリを使用して削除するドキュメントを取得してから、削除するドキュメントごとに単純なSession.Delete(asset)を実行します。
var query = session.Advanced.LuceneQuery<Asset, AssetsByExpirationDate>()
.WhereBetween("ExpirationDate",DateTime.MinValue,new DateTime(2012, 6, 1));
var assets = query.ToList();
foreach(var asset in assets)
{
session.Delete<Asset>(asset);
}
session.SaveChanges();
Ravendbはデフォルトで 128 の結果しか返さないため、ページネーションに注意してください。