MongoDB数组与对象查询的时间复杂度

时间:2015-02-19 20:48:29

标签: mongodb

我正在努力了解如何在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是否在内部做了一些魔术?

1 个答案:

答案 0 :(得分:1)

  

如果我要构建一个查询播放列表集合中包含特定歌曲ID的播放列表的查询,那么这不是一个非常慢的操作吗?似乎数据库需要遍历每个播放列表的歌曲数组,以确定要返回的播放列表。

MongoDB支持对数组字段的索引:http://docs.mongodb.org/manual/core/index-multikey/

从文档中可以看出MongoDB在搜索数组的特定值时使用索引来避免收集扫描没有问题。