Indexing MongoDB-当嵌入的键是URI时索引嵌入的键

Indexing MongoDB-当嵌入的键是URI时索引嵌入的键,indexing,mongodb,Indexing,Mongodb,在为嵌入文档编制索引时,让MongoDB中的索引正常工作有问题。如果内键是一个简单的字符串,则索引可以正常工作,但由于我的数据格式,内键通常需要是URI,这似乎不起作用。当我尝试创建索引时,查看Mongo日志,它会说索引已创建,但它会将每个文档添加到索引中 这种类型的属性名上的索引不起作用有什么原因吗?我可以做些什么来避免这个问题 示例文档 { name: "some-name", graph: { "http://example.org/subject" :

在为嵌入文档编制索引时,让MongoDB中的索引正常工作有问题。如果内键是一个简单的字符串,则索引可以正常工作,但由于我的数据格式,内键通常需要是URI,这似乎不起作用。当我尝试创建索引时,查看Mongo日志,它会说索引已创建,但它会将每个文档添加到索引中

这种类型的属性名上的索引不起作用有什么原因吗?我可以做些什么来避免这个问题

示例文档

{ 
  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" } 
        ] 
    }
  }
}