Dynamic 在MongoDB中动态添加的字段上创建索引
我有一个MongoDB集合的模式,其中字段被动态添加到文档中。当我搜索带有动态添加字段的文档时,查询速度非常慢。 示例文档如下所示:Dynamic 在MongoDB中动态添加的字段上创建索引,dynamic,indexing,Dynamic,Indexing,我有一个MongoDB集合的模式,其中字段被动态添加到文档中。当我搜索带有动态添加字段的文档时,查询速度非常慢。 示例文档如下所示: { "_id" : ObjectId("4657439ad7f616df3f49"), "name" : "test1", "created_at" : ISODate("2014-06-13T10:48:41.501Z"), "Status" : "NEW", "email":"test@test.com", "r
{
"_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" : {
}
这清楚地表明有必要建立索引。但我不知道如何在这些非确定性字段上创建索引。
注*:该文件没有所讨论的嵌入文件。我是MongoDB新手。您可以在非确定性字段上创建索引。就用吧
我不确定MongoDB,但如果我们讨论任何数据库和表,那么在非确定性字段上创建索引就没有问题了。这将是DB的额外负担。。而且您的查询在大量检索期间可能会变慢。从4.2版MongoDb宣布的“通配符索引”开始。这就是你要找的。下面是一个如何创建通配符索引的示例
db.myCollection.createIndex( { "$**": 1 } );
甚至可以为子文档创建通配符索引,如下所示:
db.myCollection.createIndex( { "subdocument.$**": 1 } );
有关更多详细信息:如果在动态添加之前不知道已添加的文件“名称”,如何对其进行索引。。。如果您正在寻找自动化,并且用户可以添加任何字段,那么您可以在为正在搜索的每个字段运行查询之前确保索引。第一次之后,ensureIndex命令没有效果,重复该命令是无害的。当然,这可能导致一个包含N个索引的集合。这是一种交换。
db.myCollection.createIndex( { "subdocument.$**": 1 } );