gpt4 book ai didi

indexing - 在 RavenDB 中查询嵌套字典

转载 作者:行者123 更新时间:2023-12-04 06:17:30 25 4
gpt4 key购买 nike

这个问题是关于查询嵌套字典的。

我有一个案例,它可以简化为以下设置,其样式包含一个包含 Collis 列表的 SKU 列表。

类定义:

public class Style
{
public string Name { get; set; }
public Dictionary<string, Sku> Skus = new Dictionary<string, Sku>();
}
public class Sku
{
public string Name { get; set; }
public Dictionary<string, Colli> Collis = new Dictionary<string, Colli>();
}
public class Colli
{
public string Name { get; set; }
}

RAVEN 数据库中的 JSON 数据:
{
"Skus": {
"Sku1": {
"Collis": {
"Right": {
"Name": "Right"
},
"Right again": {
"Name": "Right again"
},
"Wrong": {
"Name": "Wrong"
}
},
"Name": "Sku1"
},
"Sku2": {
"Collis": {
"Wrong 1": {
"Name": "Wrong 1"
},
"Wrong 2": {
"Name": "Wrong 2"
},
"Wrong 3": {
"Name": "Wrong 3"
}
},
"Name": "Sku2"
}
},
"Name": "Style1"
}

有效查询:

(要求带特定名称的 skus 的样式)
var existingStyleWithSku1 = session.Query<Style>().Where(s => s.Skus["Sku1"] != null).ToList();
var nonexistingStyleWithSku4 = session.Query<Style>().Where(s => s.Skus["Sku4"] != null).ToList();

无效的嵌套查询

(请求包含名为“Sku1”的 sku 包含名为“Right”的 colli 的样式)
var styleWithSpecificColli = session.Query<Style>().Where(s => s.Skus["Sku1"].Collis["Right"] != null).ToList();

当我尝试执行最后一个查询时,我收到以下消息:

{ "Url": "/indexes/dynamic/Styles?query=-Skus.get_Item(%2522Sku1%2522).Collis.Right%253A%255B%255BNULL_VALUE%255D%255D%2520AND%2520Skus.get_Item(%2522Sku1%2522).Collis.Right%253A*&start=0&pageSize=128&aggregation=None", "Error": "System.ArgumentException: The field ')CollisRight' is not indexed, cannot query on fields that are not indexed\r\n at Raven.Database.Indexing.Index.IndexQueryOperation.AssertQueryDoesNotContainFieldsThatAreNotIndexes() in c:\Builds\raven\Raven.Database\Indexing\Index.cs:line 628\r\n at Raven.Database.Indexing.Index.IndexQueryOperation.d__1c.MoveNext() in c:\Builds\raven\Raven.Database\Indexing\Index.cs:line 542\r\n at System.Linq.Enumerable.WhereSelectEnumerableIterator2.MoveNext()\r\n
at
System.Linq.Enumerable.WhereSelectEnumerableIterator
2.MoveNext()\r\n at System.Collections.Generic.List1.InsertRange(Int32 index,
IEnumerable
1 collection)\r\n at ........



有没有办法可以执行最后一个查询?也许定义在 RavenDB 中索引什么?

先感谢您。

最佳答案

我将上面的示例发布为失败的测试,但 synhershko 更正了我的代码以使其正常工作。

实际上可以做到这一点。查询看起来像这样:

错误:

var styleWithSpecificColli = session.Query<Style>()
.Where(s => s.Skus["Sku1"].Collis["Right"] != null)
.ToList();

右:
var styleWithSpecificColli = session.Query<Style>()
.Select(s => s.Skus["Sku1"])
.Where(c => c.Collis["Right"] != null)
.ToList();

关于indexing - 在 RavenDB 中查询嵌套字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7050250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com