我试图删除比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))
});
Run Code Online (Sandbox Code Playgroud)
查询在特定日期之前删除项目的正确语法是什么?
您可以在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
});
Run Code Online (Sandbox Code Playgroud)
使用这种方式,如果您不熟悉lucene查询语法,RavenDb Query API会为您构建它,如前所示,通过调用.ToString()并获得以下Lucene格式的查询字符串.
ExpirationDate:{00010101000000000 TO 20120601000000000}
Run Code Online (Sandbox Code Playgroud)
请注意,使用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();
Run Code Online (Sandbox Code Playgroud)
支付注意要分页,因为Ravendb只返回128结果默认.
| 归档时间: |
|
| 查看次数: |
1617 次 |
| 最近记录: |