2017-02-06 73 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。

相關問題