【问题标题】:Time complexity of query of MongoDB array vs objectMongoDB数组与对象查询的时间复杂度
【发布时间】:2015-02-20 05:54:30
【问题描述】:

我正在尝试了解如何最好地在 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 在使用数组时是否会在内部发挥一些作用,使它们与对象一样快?

【问题讨论】:

    标签: mongodb


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢,我以前见过这种对数组进行的查询,但找不到有关其实际工作原理的信息。
    猜你喜欢
    • 2018-02-08
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 2018-04-05
    • 2017-12-18
    • 2016-02-13
    • 1970-01-01
    相关资源
    最近更新 更多