dynamic - 在 MongoDB 中为动态添加的字段创建索引

我有一个 MongoDB 集合的模式,其中的字段被动态添加到文档中。当我搜索具有动态添加字段的文档时,查询非常慢。 示例文档如下所示:

{
    "_id" : ObjectId("4657439ad7f616df3f49"),
    "name" : "test1",
    "created_at" : ISODate("2014-06-13T10:48:41.501Z"),
    "Status" : "NEW",
    "email":"test@test.com",
    "rank":1278

}

字段名称、电子邮件、等级由用户动态创建并添加到文档中。 查询这些字段中的任何一个都需要很长时间才能响应。没有在这些字段上创建索引,因为性质和字段本身是动态添加的。 我试过 .explain(),这里是输出:

{
    "cursor" : "BasicCursor",
    "isMultiKey" : false,
    "n" : 1,
    "nscannedObjects" : 1683063,
    "nscanned" : 1683063,
    "nscannedObjectsAllPlans" : 1683063,
    "nscannedAllPlans" : 1683063,
    "scanAndOrder" : false,
    "indexOnly" : false,
    "nYields" : 4,
    "nChunkSkips" : 0,
    "millis" : 1708,
    "indexBounds" : {

    }

这清楚地表明需要做索引。但我不知道如何在这些非确定性字段上创建索引。 注意*:该文档没有讨论的嵌入式文档here .我是 MongoDB 的新手。

最佳答案

从 4.2 版本开始,MongoDb 宣布了“通配符索引”。这就是您要找的。这是一个如何创建通配符索引的示例。

db.myCollection.createIndex( { "$**": 1 } );

甚至你可以像这样为子文档创建通配符索引:

db.myCollection.createIndex( { "subdocument.$**": 1 } );

更多详情:https://docs.mongodb.com/manual/core/index-wildcard/

https://stackoverflow.com/questions/24205917/

相关文章:

ports - 代理服务器的推荐端口

r - 按第一列对矩阵列表进行排序

visual-c++ - 带颜色的进度条和带有通用控件的边框

r - 为什么 R 的 ccf 说 "Autocorrelations of series ' X'

c# - C# 对象中 [key] 的用途是什么?

composer-php - Composer 安装与更新现有组件?

hibernate - 在 JPA 中同时映射键和对象

r - 如何向现有的 Aspell 词典中添加更多单词?

wordpress - 如何使用非拉丁 url 在 iis 上为 wordpress 编写 web.

python - Tkinter Windows 按键事件