MongoDB ODM 索引:如何在本身具有 EmbeddedDocument 的文档上索引多个复合索引?
Posted
技术标签:
【中文标题】MongoDB ODM 索引:如何在本身具有 EmbeddedDocument 的文档上索引多个复合索引?【英文标题】:MongoDB ODM Indexing : How to Index multiple Compound index on a documnt that have EmbeddedDocument in itself? 【发布时间】:2013-07-28 17:47:57 【问题描述】:我有这些课程:
/**
* @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;
我想在产品文档上应用多个复合索引。我想添加到数据库的索引如下:
"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
我的索引注释是否正确? 看来第一个索引一定是正确的,但我认为第二个和第三个索引不正确!
【问题讨论】:
【参考方案1】:我认为 ODM 尚无法应用索引。您可能需要在 mongo.exe 命令行中通过这样的命令应用索引:
use yourDbName
db.ensureIndexes()
【讨论】:
以上是关于MongoDB ODM 索引:如何在本身具有 EmbeddedDocument 的文档上索引多个复合索引?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Doctrine MongoDB ODM 进行地理空间查询
是否可以在 Doctrine 2 ODM 中的多个字段上使用 sort()?
是否可以在 Doctrine 2 ODM 中的多个字段上使用 sort()?