Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 105|回复: 0

如何建模 NoSQL 多对多关系(以及使用全文搜索进行查询)

[复制链接]

1

主题

1

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2023-11-1 12:25:16 | 显示全部楼层 |阅读模式
这是 NoSQL 数据建模系列的第 3 部分。在本系列的第一部分中,我们介绍了 NoSQL 一对一关系建模。在第二部分中,我们探索了 NoSQL 一对多关系建模。这是第三篇也是最后一篇文章,我们将深入探讨 NoSQL 多对多关系建模。

我们通过两种方式对 NoSQL 多对多关系进行建模:

嵌入式多对多 NoSQL 数据建模
使用连接集合的多对多 NoSQL 数据建模
对于第二个示例,我们将使用 奥地利手机号码清单 相关文档并演示全文搜索来对数据执行高级查询。

NoSQL 多对多数据建模

此处概述的原则适用于任何 NoSQL 数据库。但是,要继续操作,您需要设置 Tigris。这是一个快速且简单的过程。Tigris Docs 有一个 快速入门来向您展示如何注册。

注册后,创建一个名为”的新项目,然后从 Tigris 模板创建一个新的本地应用程序以开始使用:

按照提示添加您的。

嵌入多对多 NoSQL 数据
让我们从使用嵌入文档对 NoSQL 多对多关系进行建模开始。为此,我们将对一组课程和学生进行建模。会有很多课程,每个课程都有很多学生。



在 Playground 存储库中的模型目录中创建一个新文件 在该文件中创建一个course集合student ,如下所示:
我们创建了两个模型,每个模型都有自己的系列。第一个集合 , course将包含学生可以学习的所有课程。第二个集合是student集合,将包含学生列表,我们还将学生正在参加的课程嵌入到学生文档中。在网上29,33我们还向courseIds和 interests数组添加了一个搜索标签。这将使我们能够使用 Tigris 的全文搜索来查询特定课程。

现在让我们更改该index.ts文件,以便我们可以探索这种 NoSQL 设计模式:
我们5建立13数据库和馆藏。在第 19 行,我们启动一个事务并将文档添加到该事务中的集合中。这可确保两个集合中的数据一致。在网上71,我们使用 Tigris 的全文搜索来查找所有正在学习第一门课程并且对"databases". 全文搜索是处理复杂情况的一个很好的用例。我鼓励您此时尝试一些更复杂的查询,以真正了解全文搜索的效果如何。使用相关文档的 id 进行 NoSQL 多对多数据建模的嵌入式方法非常有效,并且适用于大多数用例。我建议从这个设计开始。但在某些情况下,会同时进行大量写入来更新文档。这可能会导致大量写入冲突。避免这种情况的一种方法是创建一个将学生链接到课程的中间文档和集合。让我们将 courses.ts文件编辑为如下所示。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|DiscuzX

GMT+8, 2025-9-13 04:18 , Processed in 0.046160 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表