微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我可以在 MongoDB 中索引对象类型子文档的键吗?

如何解决我可以在 MongoDB 中索引对象类型子文档的键吗?

有什么方法可以根据对象类型的子文档的键来索引我的集合吗?并且所有文档中的key并不是统一的,不同的文档有不同的key,但是有一些通用的key。子文档的关键字是取自 NLTK 单词语料库的英语单词。文档结构如下:

{
    _id: 24752893,dictionary: {
        attain: {
            language: ....,count: ....,},book: {
            language: ....,obtain: {
            language: ....,....
    }
},{
    _id: 6786765789,dictionary: {
        book: {
            language: ....,carbon: {
            language: ....,garbage: {
            language: ....,........
{
    _id: 76675567,dictionary: {
        web: {
            language: ....,....
    }
}

我想根据对象类型字典字段的键(即英文单词)进行索引,以加快搜索速度。我使用的是 MongoDB 4.4 版。

解决方法

dictionary: [
    {
    attain: {
        language: ....,count: ....,},book: {
        language: ....,obtain: {
        language: ....,}
}
]

--------------或使用属性模式------------

dictionary: [
    
    {
        k:'attain',language: ....,{
        k:'book',{
        k:'obtain',}

]

使用$elemMatch查找合适的子集,你的模式设计是错误的 像这样修改您的架构并使用多键索引。 https://docs.mongodb.com/manual/core/index-multikey/

db.collection.createIndex( { "dictionary.k": 1,"dictionary.language": 1,"dictionary.count":1 } )

,

所以不,Mongo 没有可用的“对象键”索引选项,可能是以下方法之一:

  1. 在每个文档上维护一个数组,其中包含它所拥有的单词,将该字段编入索引,然后更改您的查询以首先查询该字段。

  2. 使用 wildcard indexes,您应该阅读 wildcard restriction docs 以确保它能够满足您的查询需求,因为它们有一些不同于其他索引类型的独特行为。通配符的索引创建语法如下:

db.collection.createIndex( { "dictionary.$**" : 1 } )

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。