我有一个 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 } );
关于dynamic - 在 MongoDB 中为动态添加的字段创建索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24205917/