2011-12-21 77 views
3

如何有條件地在RavenDB中修改文檔。下面的代碼只是把類型贊助人的所有文件打包成Middle Initial = JJJ。我也想做到這一點每個條件..例如..做同樣的補丁同樣的贊助文件類型..但只有那些有城市=「紐約」RavenDB中的條件修補程序請求

store.DatabaseCommands.UpdateByIndex("Raven/DocumentsByEntityName", 
             new IndexQuery { Query = "Tag:Patrons" }, 
             new[] 
             { 
              new PatchRequest 
               { 
                Type = PatchCommandType.Set, 
                Name = "MiddleInitial", 
                Value = "JJJ"               
               } 
              }, allowStale: false); 

回答

3

編輯:似乎我對這個答案錯了​​,因爲Ayende在他的回答中解釋瞭如何做到這一點。

這是目前無法完成的事情。然而,馬特沃倫已經實施了一些基於IronJS的東西來做這件事。我不知道它是否會成爲主要產品的一部分,但如果您確實需要它,您當然可以使用他的Github回購。

相反,我建議你或者自行修補文檔,或者不要非規範化數據並使用.Include(),如果這適用於你的情況。

+0

有沒有辦法來有條件地更新散裝ravendb文檔領域..在這種情況下。 – ZVenue 2011-12-21 21:49:52

+0

請參閱下面的Ayendes答案 - 它的工作原理! :) – 2011-12-22 11:20:48

+0

請參閱我對Ayende解決方案的迴應。你知道如果我可以做同樣的價值嵌套兩個或三個層次下來嗎?謝謝 – ZVenue 2011-12-23 18:29:20

3

ZVenue, 你做到這一點使用:

store.DatabaseCommands.UpdateByIndex("Patrons/ByCity", 
             new IndexQuery { Query = "City:\"New York\"" }, 
             new[] 
             { 
              new PatchRequest 
               { 
                Type = PatchCommandType.Set, 
                Name = "MiddleInitial", 
                Value = "JJJ"               
               } 
              }, allowStale: false); 

凡惠顧/ ByCity指數定義爲:

from p in docs.Patrons select new { p.City } 
+0

如果City值嵌套在JSON中,我可以在索引中使用它嗎? 「從docs.patrons中的p選擇新的{p.Zone1.Country.City}」? – ZVenue 2011-12-23 17:08:51

相關問題