我正在尝试删除ravenDB中某个特定点之前的文档。我仍然不熟悉Lucene,并且很难构建这个查询。
_Session.Advanced.DatabaseCommands.DeleteByIndex(
typeof(AssetsByExpirationDate).Name,
new IndexQuery()
{
Query = string.Format("ExpirationDate:[\"{0:MM/dd/yyyy}\" TO \"{1:MM/dd/yyyy}\"]", DateTime.MinValue, new DateTime(2012,6,1))
});
查询在特定日期之前删除项目的正确语法是什么?
答案 0 :(得分:5)
您可以在DatabaseCommands IndexQuery之外构建查询,并使用Query.ToString()填充IndexQuery Query字符串,如下所示:
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 Query API将通过调用.ToString()为您构建它,并获得以下Lucene格式的查询字符串。
ExpirationDate:{00010101000000000 TO 20120601000000000}
请注意,使用DatabaseCommands删除不适用于陈旧索引。所以要小心或使用标准的lucene查询来检索要删除的文档,然后执行一个简单的 Session.Delete(asset) foreach文档来删除。
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个结果。