【问题标题】:RavenDB creating static index and query on dictionaryRavenDB 在字典上创建静态索引和查询
【发布时间】:2016-01-08 20:28:03
【问题描述】:

我正在尝试创建一个静态索引,其中我想要所有存在键并具有值的文档。 value 本身并不重要,只有 key 存在。

我正在使用动态字段探索这个示例: https://ravendb.net/docs/article-page/2.5/csharp/client-api/advanced/dynamic-fields

...虽然我正在使索引正常工作,但我不确定我使用的查询是否正确。

这是示例类:

public class Result
{
    public Dictionary<string, List<Data>> Results { get; set; }
}

字典中的键是用户的 ID(例如“user/1”),值是数据对象的列表。所以 json 结构看起来像这样:

{
  "Results" :
  {
    "user/1": [{...}],
    "user/2": [{...}],
  }
}

我使用的索引是这样的:

public class Result_ByUserId : AbstractIndexCreationTask<Result>
{
    public Result_ByUserId()
    {
        Map = res => from r in res
                          select new
                          {
                              _ = r.Results
                                  .Select(d => CreateField(d.Key, d.Value))
                          };
    }
}

我的问题归结为查询,因为它假定我想查看特定的键和值。

var resultat = session.Advanced.DocumentQuery<Result>("Result/ByUserId ")
                .WhereEquals("user/1", "") // How do I write a !isNullOrEmpty?
                .ToList();

...我不想这样做。我只想要具有值不为空或为空的键的结果。有人有什么好的建议吗?

【问题讨论】:

    标签: indexing ravendb


    【解决方案1】:

    您可以做的是根据字典是否有值来索引一个布尔标志,然后对其进行查询。

    public class Result_ByUserId : AbstractIndexCreationTask<Result>
    {
        public Result_ByUserId()
        {
            Map = res => from r in res
                            select new
                            {
                                _ = r.Results
                                    .Select(d => CreateField(d.Key, d.Value != null ? true : false, false, true))
                            };
        }
    }
    

    查询可以是:

    var resultat = session.Advanced.DocumentQuery<Result>("Result/ByUserId ")
        .WhereEquals("user/1", true) 
        .ToList();
    

    这将返回具有 Dictionary 键为 user/1 且字典值不为空的任何 Result 文档。

    不确定这是不是最好的方法,但它对我有用...

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多