2017-02-06 74 views
0

我需要以编程方式删除一堆文档。我可以使用JavaScript的“补丁”功能在界面中找到这些文件,并添加属性来识别它们,就像这样:如何删除某个属性的所有RavenDB文档

if (__document_id.indexOf("baddata") > 0) { 
    this.'MakeThisGoAway' = true; 
} 

但我不能找到一种方法来删除一个文件“补丁”。 (按设计我假设)

从乌鸦的文档,它看起来像要做到这一点是通过卷曲一个DELETE请求以正确的方式,如下所述:与请求等https://ravendb.net/docs/article-page/3.5/http/client-api/commands/documents/how-to/delete-or-update-documents-using-index

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

但唯一的例子用于删除集合中的所有文档。它看起来像我应该能够包括一个像“propertyname = MakeThisGoAway & value = true”的查询,但我无法找到有关具体如何工作的文档中的任何内容。我错过了什么吗?

回答

1

我想到了这一点,我错过了几个步骤,也朦胧了lucene查询的语法。

在情况下,它可以帮助任何人,这里的全套步骤我不得不通过大量删除Ravendb文件:

  1. 如果您需要删除的历史文献,从版本排除集合。如果您不这样做,Raven将不会让您使用“Raven-Document-Revision-Status”删除文档:“历史”。转到系统文档,找到Raven/Versioning/CollectionYouWant,并将“Exclude”设置为true。

  2. 转到文档/修补程序,选择集合,选择您想要的集合,然后编写一个修补程序脚本来为要删除的数据添加标志字段。 (如果您想要删除某个特定字段具有特定值的所有文档,则可以跳过此步骤)另外,如果此数据是只读的,则需要将其设置为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; 
    } 
    
  3. 将您刚刚创建的字段添加到索引。转到索引,点击铅笔按钮,并将“MakeThisGoAway = doc.MakeThisGoAway”添加到其地图中的select语句。然后保存,并通过在studio中重新打开索引并在Gear图标下执行“Index Entries”来强制重建索引。

  4. 删除与您添加,使用卷曲或邮递员发送标志字段中的所有文件,一个DELETE:

    http://ravenserver:8080/databases/DbName/bulk_docs/This/Is/Your/Index?query="MakeThisGoAway:true" 
    
  5. 检查,以确保你想要走都走了的文件。如果一切正常,则通过从索引中删除标志属性进行整理,然后将版本管理文档重新设置为排除:false。

相关问题