如何删除具有特定属性的所有RavenDB文档

如何删除具有特定属性的所有RavenDB文档,ravendb,Ravendb,我需要以编程方式删除一堆文档。我可以在UI中使用javascript“补丁”功能来查找这些文档,并添加一个属性来标识它们,如下所示: if (__document_id.indexOf("baddata") > 0) { this.'MakeThisGoAway' = true; } 但我找不到在“补丁”中删除文档的方法。(根据我的设想) 从Raven docs看来,正确的方法是通过curl执行删除请求,如下所述:使用如下请求: curl -X DELETE "http://loc

我需要以编程方式删除一堆文档。我可以在UI中使用javascript“补丁”功能来查找这些文档,并添加一个属性来标识它们,如下所示:

if (__document_id.indexOf("baddata") > 0) {
   this.'MakeThisGoAway' = true;
}
但我找不到在“补丁”中删除文档的方法。(根据我的设想)

从Raven docs看来,正确的方法是通过curl执行删除请求,如下所述:使用如下请求:

curl -X DELETE "http://localhost:8080/databases/NorthWind/bulk_docs/Raven/DocumentsByEntityName?&query=Tag%3AShops&allowStale=false" 

但唯一的例子是删除集合中的所有文档。看起来我应该能够包含一个类似“propertyname=MakeThisGoAway&value=true”的查询,但是我在文档中找不到任何关于具体工作方式的信息。我遗漏了什么吗?

我发现了这一点,我遗漏了几个步骤,而且对lucene查询的语法也不清楚

如果它对任何人都有帮助,以下是我批量删除Ravendb文档所需的全部步骤:

  • 如果需要删除历史文档,请从版本控制中排除集合。如果您不这样做,Raven将不允许您删除“Raven文档修订状态”:“历史”的文档。转到系统文档,找到所需的Raven/Versioning/CollectionYouWant,并将“Exclude”设置为true

  • 转到“文档/修补程序”,选择“集合”,选择所需的集合,然后编写修补程序脚本,将标志字段添加到要删除的数据中。(如果要删除具有特定字段特定值的所有文档,可以跳过此步骤)此外,如果此数据为只读,则需要将其设置为false。示例修补程序脚本:

    // wrap with a conditional to only affect the data that meets your criteria
    if (this.baddata == 1 || __document_id.indexOf("baddata") > 0) {
        // remove Raven-Read-Only, or the delete will fail
        this['@metadata']['Raven-Read-Only'] = false;  
        // add a flag field to identify the documents you will be deleting
        this.MakeThisGoAway = true;
    }
    
  • 将刚创建的字段添加到索引中。转到索引,点击铅笔按钮,并将“MakeThisGoAway=doc.MakeThisGoAway”添加到其映射中的select语句中。然后保存,并通过在studio中重新打开索引并在齿轮图标下执行“索引项”来强制重新索引

  • 通过使用curl或postman向以下地址发送删除消息,删除添加了标志字段的所有文档:

    http://ravenserver:8080/databases/DbName/bulk_docs/This/Is/Your/Index?query="MakeThisGoAway:true"
    
  • 检查以确保您想要的文件已丢失。如果一切正常,请通过从索引中删除flag属性进行整理,然后将版本控制文档设置回Exclude:false