我想我的音乐应用程序的模式设计有问题。MongoDB架构设计。不能得到我想要的
我有3系列:Artists
,Tracks
和Albums
。 和3类:artists
,从artists
albums
和tracks
文件:
[_id] => MongoId Object
(
[$id] => 4ee5bbfd615c219a07000000
)
[freeze] => false,
[genres] => Array,
[hits] => 0,
[name] => Sarya Al Sawas,
[pictures] => Array,
文件从albums
:
[_id] => MongoId Object
(
[$id] => 4ee88308615c218128000000
)
[name] => Sabia
[slug] => wafiq-habib-ft-sarya-al-sawas-sabia
[year] => 1999
[genres] => Array,
[pictures] => Array,
[artists] => Array
(
[0] => MongoId Object
(
[$id] => 4ee34a3b615c21b624010000
)
[1] => MongoId Object
(
[$id] => 4ee5bbfd615c219a07000000
)
)
文件从tracks
[_id] => MongoId Object
(
[$id] => 4ee8a056615c21542a000000
)
[name] => Bid Ashok
[slug] => wafiq-habib-ft-sarya-al-sawas-bid-ashok
[genres] => Array,
[file] => /m/tracks/t.4ee8a05540c624.04707814.mp3,
[freeze] => false,
[hits] => 0,
[duration] => 303,
[albums] => Array
(
[0] => MongoId Object
(
[$id] => 4ee5cbc3615c216509000000
)
)
[artists] => Array
(
[0] => MongoId Object
(
[$id] => 4ee5bbfd615c219a07000000
)
[1] => MongoId Object
(
[$id] => 4ee34a3b615c21b624010000
)
)
首先是
是好的模式设计??! 我以这种方式设计了这种模式,因为有多对多的关系 有时曲目有2位艺术家,专辑有2位艺术家。
无论如何,我有问题查询附加到特定曲目的专辑。
可以说我是艺术家页面
我需要得到所有艺术家的专辑上,并跟踪,所以我这样做:
$cursors = array( 'albums' => $this->albums->find(array('artists' => $artist->_id))->sort(array('_id' => -1)), 'tracks' => $this->tracks->find(array('artists' => $artist->_id))->sort(array('_id' => -1)), 'clips' => $this->clips->find(array('artists' => $artist->_id))->sort(array('_id' => -1)) ); foreach($cursors as $key => $cursor) { foreach($cursor as $obj) { $obj['name'] = ($this->lang->get() != 'ar' ? $obj['translated']['name'] : $obj['name']); $obj['by'] = $this->artists()->get($obj['artists'])->toString('ft'); ${$key}[] = $obj; } }
我需要的所有曲目循环并得到他们的专辑名称可以说这个艺术家有3000首曲目 我认为它会很慢....
所以我的问题是:这是一个很好的架构设计?
谢谢@mnemosyn我把专辑链接回艺术家的原因是因为我需要他们在那里,我并不总是想要得到曲目有时我只想要专辑,艺术家直接在轨道文件上的名字是一个不错的主意,我试过它它的作品不错,但我想看看是否有人想出了一个更好的想法.... – Pinokyo 2011-12-14 15:24:03