linq - 修补 RavenDB 文档 - LINQ 查询中使用的多个条件

标签 linq nosql ravendb

对于满足给定条件的所有文档,我想修补更新这些文档中的一个字段。为此,我在 LINQ Pad 中编写了一个查询,以获取所需的文档子集。

即:

Session.Query<Movie>()    
.Where(x => x.Status == "Released" && x.IsDeleted == false && x.ReleaseDate.Date < new DateTime(2012, 4, 3))
.Dump();

现在我有了文档列表。但是我需要修改一个字段。为此,我编写了一个索引和补丁命令。我需要帮助来完成这项任务。

补丁码(不完整):

  store.DatabaseCommands.UpdateByIndex("Movies/NewIndexName",
         new IndexQuery { Query = "IsDeleted:false" },
         new[]
        {
          new PatchRequest
              {
                  Type = PatchCommandType.Modify,
                  Name = "Status",
                  Value = "Testing"
               }
        }, allowStale: false);

索引是

  from doc in docs.Movies
  select new { ReleaseDate = doc.ReleaseDate.Date, IsDeleted = doc.IsDeleted, Status =

  doc.Status }

具体来说,我的问题是..我的方法是否正确..如果是,我如何在条件中添加多个条件..它说Query = "IsDeleted:false"我可以向查询添加更多比较检查吗(就像上面的 LINQ 查询一样)?

编辑:(使用 DANIEL LANG 的解决方案)

这给出了格式异常。输入的字符串格式不正确。

store.DatabaseCommands.UpdateByIndex("Movies/NewIndexName",
             new IndexQuery
             {
                 Query =
         string.Format("Status:Released AND IsDeleted:false AND ReleaseDate:{* TO {0}}",
         DateTools.DateToString(new DateTime(2012, 4, 3),
                                DateTools.Resolution.MILLISECOND))
             },
             new[]
            {
              new PatchRequest
                  {
                      Type = PatchCommandType.Modify,
                      Name = "Status",
                      Value = "TestingReleased"
                   }
            }, allowStale: false);

最佳答案

是的,您可以有多个条件并使用标准 bool 运算组合它们。您实际上是在此处构建一个 lucene 查询,所以让我们看看这个网站以了解有关如何编写它们的更多信息:http://lucene.apache.org/core/old_versioned_docs/versions/2_9_1/queryparsersyntax.html#Boolean%20operators

关于日期的事情是,raven 将它们(与其他所有内容一样)存储为字符串,并且它使用的格式是专门为启用范围查询和类似内容而选择的,因此它可能不是您所期望的......

因此,为了查询日期,您需要以特殊方式对其进行格式化。 Raven.Abstractions.Linq 中有一个 DateTools 类,它有一个有用的 DateToString 方法。

您可以像这样从上面构造相同的查询:

(4 月 27 日编辑,在字符串中添加额外的 {})

Query = 
    string.Format("IsDeleted:false AND ReleaseDate:{{* TO {0}}}",
    DateTools.DateToString(new DateTime(2012,4,3), 
                           DateTools.Resolution.MILISECONDS))

关于linq - 修补 RavenDB 文档 - LINQ 查询中使用的多个条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10214296/

相关文章:

c# - 按列和值比较两个 csv 文件并显示不同值的行号

linq 等于覆盖

MongoDB geoNear 多坐标

nosql - NoSql (RavenDB) 的多对多设计

c# - (嵌入式)Raven Studio 和我现有的 MVC 4 路由不能一起工作?

c# - 数据源不支持服务端数据分页

c# - 检查 List<T> 中是否存在以下项目

cassandra - Cassandra中的Counter Vs Int列?

mysql - 需要关于映射关键字关系的数据库技术和方法建议

linq - 比较 RavenDb 中 Where 子句中同一实体的两个属性