首页 > 解决方案 > MongoDB:创建一个单独的集合/模式,其中每个项目都是一个数组,而不是一个对象

问题描述

我是数据库和 mongodb 的新手。我有收藏品SongLine. Line代表歌曲歌词中的一行。到目前为止,我将这些行嵌入到Song

1:嵌入式(以及我希望它的外观)

{
 title: 'This Charming Man',
 pages: 300,
 lines: [
  { content: 'I would go out tonight', ... },
  { content: 'but I haven't got a stitch to wear', ...}
 ]
}

现在我想将这些行移到他们自己的收藏中并引用它们。我知道如何引用objects,所以我现在以这种方式实现它:

const lyricsSchema = new Schema({
  lines: { type: [LineSchema], default: [] },
});

在我的Song架构中:

lyrics: {
    type: Schema.Types.ObjectId,
    ref: 'Lyrics',
  },

但是:确实有效,但是我现在查询时在我的 Song 对象和我的线阵列之间有一个额外的层,因为现在我的LyricsObject 包含该lines数组(这是完全预期的):

2:现在的样子,带有歌曲模式和歌词模式

{
 title: 'This Charming Man',
 pages: 300,
 lyrics: {
    lines: [
     { content: 'I would go out tonight', ... },
     { content: 'but I haven't got a stitch to wear', ...}
 }
 ]
}

如何将其lines移至单独的集合中,但最终结果看起来像1)?(我最初拥有的,当它仍然嵌入时)。我想将 mylines变成一个单独的集合,它包含数组,而是一个数组。

标签: node.jsmongodbmongoosedatabase-designnosql

解决方案


推荐阅读