我正在努力了解如何在MongoDB中最好地设置架构。
我所拥有的是多对多的关系,如下所示:
播放列表文档:
{
_id: '111',
title: 'some playlist',
songs: ['222', '333']
}
歌曲文件:
{
_id: '222',
album: 'some album',
artist: 'some artist'
}
播放列表可以引用许多歌曲,而歌曲可以属于许多播放列表。
如果我要构建一个查询播放列表集合中包含特定歌曲ID的播放列表的查询,那么这不是一个非常慢的操作吗?似乎数据库需要遍历每个播放列表的歌曲数组,以确定要返回的播放列表。
我到达的解决方案是构建我的播放列表文档:
{
_id: '111',
title: 'some playlist',
songs: {
222: true,
333: true
}
}
这似乎就是我应该这样做的(对我来说),然而我能找到的每个例子都使用数组。当使用使得它们像对象一样快速使用的数组时,Mongo是否在内部做了一些魔术?
答案 0 :(得分:1)
如果我要构建一个查询播放列表集合中包含特定歌曲ID的播放列表的查询,那么这不是一个非常慢的操作吗?似乎数据库需要遍历每个播放列表的歌曲数组,以确定要返回的播放列表。
MongoDB支持对数组字段的索引:http://docs.mongodb.org/manual/core/index-multikey/
从文档中可以看出MongoDB在搜索数组的特定值时使用索引来避免收集扫描没有问题。