RavenDB 在字典上创建静态索引和查询
RavenDB creating static index and query on dictionary
我正在尝试创建一个静态索引,我希望所有文档都包含一个键并具有一个值。值本身并不重要,只有键存在。
我正在使用动态字段探索这个示例:
https://ravendb.net/docs/article-page/2.5/csharp/client-api/advanced/dynamic-fields
...虽然我正在使索引正常工作,但我不确定我使用的查询是否正确。
这是示例 class:
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();
...我不想这样做。我只想要具有键的结果,其中的值不为 null 或为空。有人有什么好的建议吗?
你可以做的是根据字典是否有值索引一个布尔标志,然后查询它。
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();
这将 return 任何具有 Dictionary
键 user/1
和不为空的字典值的 Result
文档。
不确定这是最好的方法,但它对我有用...
希望对您有所帮助!
我正在尝试创建一个静态索引,我希望所有文档都包含一个键并具有一个值。值本身并不重要,只有键存在。
我正在使用动态字段探索这个示例: https://ravendb.net/docs/article-page/2.5/csharp/client-api/advanced/dynamic-fields
...虽然我正在使索引正常工作,但我不确定我使用的查询是否正确。
这是示例 class:
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();
...我不想这样做。我只想要具有键的结果,其中的值不为 null 或为空。有人有什么好的建议吗?
你可以做的是根据字典是否有值索引一个布尔标志,然后查询它。
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();
这将 return 任何具有 Dictionary
键 user/1
和不为空的字典值的 Result
文档。
不确定这是最好的方法,但它对我有用...
希望对您有所帮助!