【发布时间】:2011-08-13 11:55:42
【问题描述】:
这个问题是关于查询嵌套字典的。
我有一个案例可以简化为以下设置,其样式包含包含 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 DB 中的 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"
}
有效查询:
(询问具有特定名称的sku的样式)
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();
当我尝试执行最后一个查询时,我收到消息:
{ "网址": "/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", “错误”:“System.ArgumentException:字段 ')CollisRight' 不是 已编入索引,无法查询未编入索引的字段\r\n at Raven.Database.Indexing.Index.IndexQueryOperation.AssertQueryDoesNotContainFieldsThatAreNotIndexes() 在 c:\Builds\raven\Raven.Database\Indexing\Index.cs: 628 行\r\n 在 Raven.Database.Indexing.Index.IndexQueryOperation.d__1c.MoveNext() 在 c:\Builds\raven\Raven.Database\Indexing\Index.cs: 542 行\r\n 在 System.Linq.Enumerable.WhereSelectEnumerableIterator
2.MoveNext()\r\n at System.Linq.Enumerable.WhereSelectEnumerableIterator2.MoveNext()\r\n 在 System.Collections.Generic.List1.InsertRange(Int32 index, IEnumerable1 集合)\r\n 在 ........
有没有办法可以执行最后一个查询?也许定义在 RavenDB 中索引什么?
提前谢谢你。
【问题讨论】:
-
我解决了这个问题。我将 Skus 和 Colli 集合类型从字典更改为原生数组。这样我就可以使用这个查询:“Skus,Collies,Name:Right”。如果有人知道如何使用字典解决问题,我很想听听 :)
-
Stephan,请将此作为失败的测试发布在邮件列表中
标签: indexing nested ravendb dictionary