RavenDB中的条件补丁请求

时间:2011-12-21 20:05:49

标签: indexing nosql patch ravendb

如何有条件地在RavenDB中修补文档。下面的代码只是修改了所有类型patron的文件到Middle Initial = JJJ。我也想在每个条件下执行此操作..例如..为相同的Patrons文档类型执行相同的修补程序..但仅适用于具有City =“New York”的那些

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

2 个答案:

答案 0 :(得分:3)

编辑:我的答案似乎错了,因为Ayende在答案中解释了如何做到这一点。

这是目前无法完成的事情。然而,Matt Warren已经实现了基于IronJS的东西来完成这些工作。我不知道它何时以及是否会成为主要产品的一部分,但如果你确实需要它,你当然可以使用他的Github回购。

相反,我建议您自行修补文档或不对数据进行非规范化,并使用.Include()代替,如果这适用于您的情况。

答案 1 :(得分: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);

Patrons / ByCity指数定义为:

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