您可以在 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 个结果。