2013-07-29 3 views
4

Je possède ce cours:Indexation ODM de MongoDB: Comment indexer plusieurs index composés sur un document avec EmbeddedDocument en lui-même?

/** 
* @ODM\Document 
* @Indexes({ 
* @Index(keys={"status"="asc", "regDate"="desc", "expDate"="asc", "isFeatured"="asc"}), 
* @Index(keys={"status"="asc", "visits.total"="asc", "visists.today"="asc"}), 
* @Index(keys={"status"="asc", "price.value"="asc", "regDate"="asc"}) 
* }) 
*/ 
class Product { 

    /** 
    * @ODM\Date 
    */ 
    protected $regDate; 

    /** 
    * @ODM\Date 
    */ 
    protected $expire; 

    /** 
    * @ODM\EmbedOne(targetDocument="Price") 
    */ 
    protected $price; 

    /** 
    * @ODM\Boolean 
    */ 
    protected $isFeatured; 

    /** 
    * @ODM\EmbedMany(targetDocument="Visit") 
    */ 
    protected $visits; 
} 

/** 
* @ODM\EmbeddedDocument 
*/ 
class Price { 
    /** 
    * @ODM\Int 
    */ 
    protected $value; 

    /** 
    * @ODM\String 
    */ 
    protected $currency; 
} 

/** 
* @ODM\EmbeddedDocument 
*/ 
class Visit { 
    /** 
    * @ODM\Int 
    */ 
    protected $total; 

    /** 
    * @ODM\Int 
    */ 
    protected $today; 

    /** 
    * @ODM\EmbedMany(targetDocument="VisitPerDate") 
    */ 
    protected $perDate = array(); 
} 

/** 
* @ODM|EmbeddedDocument 
*/ 
class VisitPerDate { 
    /** 
    * @ODM\Date 
    */ 
    protected $date; 

    /** 
    * @ODM\Int 
    */ 
    protected $visit; 
} 

Je veux appliquer plusieurs indices composés sur indices produit document.Dispositif je veux ajouter à la base de données sont les suivantes:

{ "status"=1, "regDate"=-1, "expDate"=1, "isFeatured"=1 } 
{ "status"=1, "visits.total"=1, "visits.today"=1, "regDate"=1 } 
{ "status"=1, "price.value"=1, "regDate"=1 } 

était mon annotation d'indexation correcte? Il semble que le premier index doit être correct, mais je pense que le deuxième et le troisième index sont incorrects!

Répondre

2

Je pense que l'application d'index n'est pas encore possible par ODM. Vous devrez peut-être appliquer des index par une commande comme celle-ci dans la ligne de commande mongo.exe:

use yourDbName 
db.ensureIndexes() 
Questions connexes