2011-05-23 37 views
4

我在ravendb集操作中讀取了this article,但它並沒有告訴我如何通過C#更新一組文檔。我想更新符合特定條件的所有文件的字段。或者換一種說法,我想借此C#,使之更加高效:在RavenDB中設置操作

var session = db.GetSession(); 
foreach(var data in session.Query<Data>().Where(d => d.Color == "Red")) 
{ 
    data.Color = "Green"; 
    session.Store(data); 
} 
session.SaveChanges(); 

回答

6

http://ravendb.net/docs/2.5/faq/denormalized-updates

第一個參數是要更新索引的名字。 第二個參數是可以讓你指定where子句的索引查詢。查詢的語法是lucene語法(http://lucene.apache.org/java/2_4_0/queryparsersyntax.html)。第三個參數是更新子句。第四個參數是如果你想要陳舊的結果。

documentStore.DatabaseCommands.UpdateByIndex("DataByColor", 
    new IndexQuery 
    { 
     Query = "Color:red" 
    }, new[] 
    { 
      new PatchRequest 
      { 
       Type = PatchCommandType.Set, 
       Name = "Color", 
       Value = "Green" 
      } 
    }, 
    allowStale: false); 
+0

是否有文檔解釋查詢語法?具體而言,如何查找某個字段等於某個值的所有文檔? – 2011-05-23 15:57:36

+0

@ jake-pearson我修改了我的答案以反映你的問題。希望有所幫助。 – nickvane 2011-05-23 16:16:02

+0

這與查詢名稱使用的內容有關嗎? – 2011-05-23 16:24:20