2011-05-23 77 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