【问题标题】:Conditional patch requests in RavenDBRavenDB 中的条件补丁请求
【发布时间】:2011-12-21 20:05:48
【问题描述】:

如何有条件地修补 RavenDB 中的文档。下面的代码只是将所有类型为赞助人的文档修补为 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);

【问题讨论】:

    标签: indexing nosql patch ravendb


    【解决方案1】:

    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 }
    

    【讨论】:

    • 如果 City 值嵌套在 JSON 中。我可以在索引中使用它吗? “从 docs.patrons 中的 p 选择新的 { p.Zone1.Country.City}”?
    【解决方案2】:

    编辑:看来我对这个答案有误,因为 Ayende 在他的回答中解释了如何做到这一点。

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

    相反,我建议您自己修补文档,或者不要对数据进行非规范化,如果适用于您的情况,请改用 .Include() 。

    【讨论】:

    • 有没有办法批量有条件地更新ravendb文档中的字段..在那种情况下。
    • 请参阅我对 Ayende 解决方案的回复。你知道如果值嵌套了两到三层,我是否可以做同样的事情?谢谢
    • ZVenue,你为什么不试试呢?要回答您的问题 - 是的,您可以这样做,完全按照您在回复中所写的方式。你不需要在这里为 NullReferenceExceptions 开车,因为 RavenDB 会为你处理这个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    • 2014-04-20
    • 2013-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多