2016-11-29 112 views
1

让我说我有这个巨大的文件。如何正确创建索引mongodb?

其中2人得到了这个数组对象;

{ 
    status: "A", 
    group: "public", 
    "created.dt": .... 
} 

{ 
    status: "A", 
    group: "private", 
    "created.dt": .... 
} 

我索引,并确保这样的:

db.collection.ensureIndex({"created.dt":-1}); 

db.collection.ensureIndex({"created.dt":-1, "status":1}); 
db.collection.ensureIndex({"created.dt":-1, "group":1}); 

db.collection.ensureIndex({"created.dt":-1, "status":1, "group":1}); 

查询:

db.collection.find(
{ 
    "status": { 
    $in: ["A", "I"] 
    }, 
    "asset_group": "public" 
}, 
{ 
    sort: { 
    'created.dt':1 
    } 
} 
).count(); 

是错?

我使这个指数仍然缓慢。 请帮助我,你适当的index.thank

+0

没有看到您的查询(例如:查找,排序等)没有看出 –

+0

@FirdausRamlan好吧,我已编辑该帖子。 –

回答

5

用于以下查询:

db.collection.find(
{ 
    "status": { 
    $in: ["A", "I"] 
    }, 
    "asset_group": "public" 
}, 
{ 
    sort: { 
    'created.dt':1 
    } 
} 
).count(); 

最好的指数会是这样的:

db.collection.ensureIndex({"status":1, "asset_group":1, "created.dt":1}); 

db.collection.ensureIndex({"asset_group":1, "status":1, "created.dt":-1}); 

既然你查询

statusasset_group - 这些值可在索引前缀

和排序created.dt字段被切换 - 因此created.at shuold在索引前缀的最后一个值。注意:在排序时,索引可以遍历相反的顺序。

对于其他查询,其他索引可能更合适。 查看更多about compound indexes

+0

哇....它的工作!谢谢你的解释... –