gpt4 book ai didi

java - 使用 Mongodb 进行一对多映射

转载 作者:行者123 更新时间:2023-12-02 01:31:05 26 4
gpt4 key购买 nike

我是 mongodb 新手,希望设计一些对于 RDBMS 来说相当简单的东西。

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

我不确定是否需要创建 Artist 对象以及 ArtistAlias 对象,或者是否有一种方法可以将 ArtistAlias 信息嵌入到艺术家对象中并从那里进行搜索。我知道我可以嵌入这些信息,但我不知道如何查询它......例如,如果我的数据库中存储了一位名为“Michael Jackson”的艺术家,但他的别名为“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 次调用。首先,我需要将艺术家字段为 null 的别名保存起来,以便取回别名 id,然后我需要使用新学习的别名信息保存艺术家以获取艺术家的 ID,最后我需要返回并使用新的艺术家 ID 和保存后返回的信息更新别名。我觉得必须有比这更好的方法。

最佳答案

如果别名应该仅由艺术家对象引用,则无需创建单独的集合,您只需将它们作为 alias 数组嵌入到 Artist 中即可。 Here您可以找到一些关于何时进行 ember 以及何时进行引用的注意事项。

如果您有一个 artists 集合,其中包含诸如

之类的对象
{
"name": "Michael Jackson",
"alias": [
"mj",
"king of the pop"
]
}

您可以使用

db.artists.find({"alias": "mj"})

查询所有文档,其中 alias 是一个包含字符串“mj”作为其元素之一的数组。

另请查看官方documentation关于查询数组。

关于java - 使用 Mongodb 进行一对多映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56054085/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com