2016-11-29 82 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

哇....它的工作!謝謝你的解釋... –