Indexing MongoDB-当嵌入的键是URI时索引嵌入的键
在为嵌入文档编制索引时,让MongoDB中的索引正常工作有问题。如果内键是一个简单的字符串,则索引可以正常工作,但由于我的数据格式,内键通常需要是URI,这似乎不起作用。当我尝试创建索引时,查看Mongo日志,它会说索引已创建,但它会将每个文档添加到索引中 这种类型的属性名上的索引不起作用有什么原因吗?我可以做些什么来避免这个问题 示例文档Indexing MongoDB-当嵌入的键是URI时索引嵌入的键,indexing,mongodb,Indexing,Mongodb,在为嵌入文档编制索引时,让MongoDB中的索引正常工作有问题。如果内键是一个简单的字符串,则索引可以正常工作,但由于我的数据格式,内键通常需要是URI,这似乎不起作用。当我尝试创建索引时,查看Mongo日志,它会说索引已创建,但它会将每个文档添加到索引中 这种类型的属性名上的索引不起作用有什么原因吗?我可以做些什么来避免这个问题 示例文档 { name: "some-name", graph: { "http://example.org/subject" :
{
name: "some-name",
graph:
{
"http://example.org/subject" :
{
"http://example.org/predicate" :
[
{ "value" : "http://example.org/object", "type" : "uri" }
]
}
}
}
避免问题的备选方案
现在,我已将代码更改为使用替代模式,以避免此问题,因为URI现在始终是值而不是属性名,并且该模式允许我正确利用MongoDB中的多键索引:
{
name : "some-name",
graph : [
{
"subject" : "<http://example.org/subject>" ,
"predicate" : "<http://example.org/predicate>" ,
"object" : "<http://example.org/object>"
}
]
}
{
名字:“某个名字”,
图表:[
{
“主题”:“,
“谓词”:“,
“对象”:”
}
]
}
键中不能有点
驱动程序在到达数据库之前被删除。点和$是解析字符,不能在属性名称中使用,因为它们对服务器有特殊意义。$用于标记服务器操作员。点用于子文档中属性的简短表示法 简短示例: db.postings.find({“author.name”:“joe”}) 您可以在此处阅读更多有关内容: 解决这个问题的一种方法是编码。美元和其他一些值。第二种方法是将url作为元素下面的属性
{
名字:“某个名字”,
图表:
{
地点1:
{
url:“http://example.org/subject",
谓词:
[
{“url”:http://example.org/predicate,“值”:http://example.org/object“,”类型“:“uri”}
]
}
}
}
您能举一个文档示例吗?您在哪个字段上建立索引?看看您的示例文档,我很确定您将需要一个稍微不同的模式。是的,我想我可能需要,我希望我可以不使用现有的抽象语法的JSON序列化(即RDF-graph属性的上述值是RDF/JSON序列化)但是我想我可能不得不使用另一种格式是的,这个bug(由我报告)将在2.3中修复。我将为我的相关驱动程序报告一个bug
{
name: "some-name",
graph:
{
site1:
{
url:"http://example.org/subject",
predicates :
[
{ "url":"http://example.org/predicate", "value" : "http://example.org/object", "type" : "uri" }
]
}
}
}