2013-12-13 76 views
1

我有文件MongoDB的MongoEngine指數聲明

class Store(Document): 
    store_id = IntField(required=True) 
    items = ListField(ReferenceField(Item, required=True)) 
    meta = { 
     'indexes': [ 
      { 
       'fields': ['campaign_id'], 
       'unique': True 
      }, 
      { 
       'fields': ['items'] 
      } 
     ] 
    } 

而且要建立索引的項目和STORE_ID,做我的配置嗎?

回答

1

你的第二個索引聲明看起來應該做你想要的。但要確保索引真的有效,您應該使用explain。用mongo shell連接到你的數據庫並執行一個查找查詢,該查詢應該使用該索引,然後是.explain()。示例:

db.yourCollection.find({items:"someItem"}).explain(); 

輸出將是一個包含許多字段的文檔。 The documentation解釋了每個字段的含義。要特別注意這些領域:以毫秒爲單位

  • 米利斯時間查詢所需
  • indexOnly(自我解釋)
  • ň返回文檔
  • nscannedObjects的數必須檢查而不使用索引的對象數量。對於只有索引的查詢,這應該等於n。當它更高時,這意味着某些文檔不能被索引排除,必須手動掃描。
+0

['indexOnly'](http://docs.mongodb.org/manual/reference/method/cursor.explain/#explain.indexOnly)並不真正自我解釋:它表示一個覆蓋查詢。在這種特殊情況下,查詢中的所有字段**和**結果中的所有字段都是同一索引的一部分。 – Stennie