我可以在 MongoDB 中索引对象类型子文档的键吗?
Can I index the keys of a object-type subdocument in MongoDB?
有什么方法可以根据对象类型的子文档的键索引我的集合?并且所有文件中的密钥不是统一的,不同的文件有不同的密钥,但也有一些共同的密钥。子文档的关键字是从 NLTK 词库中提取的英文单词。文档结构如下:
{
_id: 24752893,
dictionary: {
attain: {
language: ....,
count: ....,
},
book: {
language: ....,
count: ....,
},
obtain: {
language: ....,
count: ....,
},
....
}
},
{
_id: 6786765789,
dictionary: {
book: {
language: ....,
count: ....,
},
carbon: {
language: ....,
count: ....,
},
garbage: {
language: ....,
count: ....,
},
....
}
},
........
{
_id: 76675567,
dictionary: {
web: {
language: ....,
count: ....,
},
obtain: {
language: ....,
count: ....,
},
carbon: {
language: ....,
count: ....,
},
....
}
}
我想根据对象类型字典字段的关键字,即英文单词进行索引,以加快搜索速度。我正在使用 MongoDB 4.4 版。
所以不,Mongo 没有可用的“对象键”索引选项,可能的方法之一是:
在每个文档上维护一个数组,其中包含它所拥有的单词,对该字段进行索引,然后更改您的查询以首先查询该字段。
使用 wildcard indexes, You should read the wildcard restriction docs 确保它能够满足您的查询需求,因为它们具有一些不同于其他索引类型的独特行为。通配符的索引创建语法如下:
db.collection.createIndex( { "dictionary.$**" : 1 } )
dictionary: [
{
attain: {
language: ....,
count: ....,
},
book: {
language: ....,
count: ....,
},
obtain: {
language: ....,
count: ....,
}
}
]
------------或者使用属性模式------------
dictionary: [
{
k:'attain',
language: ....,
count: ....,
},
{
k:'book',
language: ....,
count: ....,
},
{
k:'obtain',
language: ....,
count: ....,
}
]
使用 $elemMatch 找到合适的子集,你的模式设计是错误的
像这样修改您的架构并使用多键索引。
https://docs.mongodb.com/manual/core/index-multikey/
db.collection.createIndex( { "dictionary.k": 1, "dictionary.language": 1,"dictionary.count":1 } )
有什么方法可以根据对象类型的子文档的键索引我的集合?并且所有文件中的密钥不是统一的,不同的文件有不同的密钥,但也有一些共同的密钥。子文档的关键字是从 NLTK 词库中提取的英文单词。文档结构如下:
{
_id: 24752893,
dictionary: {
attain: {
language: ....,
count: ....,
},
book: {
language: ....,
count: ....,
},
obtain: {
language: ....,
count: ....,
},
....
}
},
{
_id: 6786765789,
dictionary: {
book: {
language: ....,
count: ....,
},
carbon: {
language: ....,
count: ....,
},
garbage: {
language: ....,
count: ....,
},
....
}
},
........
{
_id: 76675567,
dictionary: {
web: {
language: ....,
count: ....,
},
obtain: {
language: ....,
count: ....,
},
carbon: {
language: ....,
count: ....,
},
....
}
}
我想根据对象类型字典字段的关键字,即英文单词进行索引,以加快搜索速度。我正在使用 MongoDB 4.4 版。
所以不,Mongo 没有可用的“对象键”索引选项,可能的方法之一是:
在每个文档上维护一个数组,其中包含它所拥有的单词,对该字段进行索引,然后更改您的查询以首先查询该字段。
使用 wildcard indexes, You should read the wildcard restriction docs 确保它能够满足您的查询需求,因为它们具有一些不同于其他索引类型的独特行为。通配符的索引创建语法如下:
db.collection.createIndex( { "dictionary.$**" : 1 } )
dictionary: [
{
attain: {
language: ....,
count: ....,
},
book: {
language: ....,
count: ....,
},
obtain: {
language: ....,
count: ....,
}
}
]
------------或者使用属性模式------------
dictionary: [
{
k:'attain',
language: ....,
count: ....,
},
{
k:'book',
language: ....,
count: ....,
},
{
k:'obtain',
language: ....,
count: ....,
}
]
使用 $elemMatch 找到合适的子集,你的模式设计是错误的 像这样修改您的架构并使用多键索引。 https://docs.mongodb.com/manual/core/index-multikey/
db.collection.createIndex( { "dictionary.k": 1, "dictionary.language": 1,"dictionary.count":1 } )