首页 > 解决方案 > Mongo DB 的一对多映射

问题描述

我是 mongodb 的新手,我希望通过 RDBMS 设计一些相当简单的东西。

我有一个现有的音乐艺术家文件,每个艺术家都有一个“艺术家别名”(字符串)的集合。我的目标是确保艺术家只有一次真正在我的数据库中,但由于许多艺术家有多个拼写和名称,我创建了别名集合,因此我将能够知道这些其他拼写和名称实际上与此相关联我的数据库中有 1 位特定的艺术家。使用传统的关系数据库,我可以通过为别名创建一个连接表然后使用 FK 指向相应的艺术家来轻松完成此操作。但是我不确定如何在 MongoDB 中使用 Spring-Data 来解决这个问题。

我不确定是否需要创建 Artist 对象以及 ArtistAlias 对象,或者是否有一种方法可以将 ArtistAlias 信息嵌入到艺术家对象中并从那里进行搜索。我知道我可以嵌入信息,但我不知道如何查询它......例如,如果我有一个名为“迈克尔杰克逊”的艺术家存储在我的数据库中,但他的别名是“MJ”,而我只是想搜索它,但拉回完整的“Micahel Jackson”艺术家信息,我可以在不必创建单独的文档来保存所有 ArtistAlias 对象的情况下实现这一目标吗?

目前:

@Document(collection = "artist")
public class Artist
{
    @Id
    private String id;

    @TextIndexed
    private String artistName;

    @TextScore
    private Float textScore;

    private Set<String> artistAliasSet;
}

我知道我能做什么

@Document(collection = "artist")
public class Artist
{
    @Id
    private String id;

    @TextIndexed
    private String artistName;

    @TextScore
    private Float textScore;

    private Set<ArtistAlias> artistAliasSet;
}
@Document(collection = "artist_alias")
public class Artist
{
    @Id
    private String id;

    @TextIndexed
    private String aliasName;

    @TextScore
    private Float textScore;

    private Artist artist;
}

但是,这种方法确实让我很担心,因为新艺术家不断被添加到数据库中,并且由于新艺术家或别名的 ID 直到保存后才会分配,这意味着当添加新艺术家时,我将不得不对数据库进行 3 次调用。首先,我需要使用 Artist 字段保存别名以获取别名 ID,然后我需要使用新学习的别名信息保存艺术家以获取艺术家的 ID,最后我需要返回并使用保存后返回的新艺术家 ID 和信息更新别名。我觉得必须有比这更好的方法。

标签: javamongodb

解决方案


来自关系世界的一对多关系在 NoSQL 世界中不存在。您可以模拟类似的东西,您可以将一组文档存储在另一个文档下(类似父子关系)。你可以在这里找到更多


推荐阅读