gpt4 book ai didi

sql - 在从 RDBMS 切换之前需要 MongoDB 专家/开发人员的建议

转载 作者:可可西里 更新时间:2023-11-01 09:07:40 26 4
gpt4 key购买 nike

我们在 SQL2005 中有这些表:

  • albums:视频专辑详细信息(类别、标题、标签、日期、作者、喜欢,观点等
  • tags:专辑标签并按字母顺序排序(查找所有带有特定标签)
  • ratings:存储评价相册的用户id(防止重复评级)
  • comments:存储对相册的所有评论
  • comment_ratings:评价评论的用户id(防止重复评分)
  • comment_replies:对评论的所有回复,包括日期和发布者信息
  • comment_reply_ratings:对回复进行评分的用户 ID(以防止重复评级)

这种类型的结构可以在 MongoDB 中创建吗?以下操作/查询具有相同/更好的性能?

1) 获取前 10 个最喜欢的专辑(标题、缩略图、观看次数、喜欢次数、作者和日期)与分页。 如果用户点击下一步,则获取下 10 个最喜欢的专辑等

2) 通过分页获得观看次数最多的前 10 个专辑。

3) 通过分页获取前 10 个讨论最多的专辑。

4) 获取最近创建的相册列表,分页但最多100个相册

5) 获取给定用户的所有相册(标题、缩略图、浏览量、喜欢程度、作者和日期)

6) 获取特定专辑的详细信息并仅显示前 10 条评论寻呼。 Next 将加载接下来的 10 条评论,依此类推。

7) 获取相关专辑列表。关系将通过专辑标签或专辑名

8) 关键字搜索会搜索专辑的标题或标签字段。

9) 当有人点击一个标签时,获取带有该标签的所有相册的列表

10)当有人点击分类链接时,得到10个分类的列表相册

11)获取按评分、日期等排序的评论

12)文档中新条目的顺序可以是控制?

感谢阅读。上帝保佑。

最佳答案

我建议采用以下结构:

Album {
Id,
UserId,
Title,
Category,
Tags (list of tag names for fast access and for searching),
Ratings (user ids, use $addToSet),
Likes (user ids, use $addToSet),
ViewsCount, (probably just integer value,)
RatingsCount (use $inc to increment this field once someone vote for album),
CommentsCount (use $inc everytime when someone post comment),
LikesCount (use $inc everytime when someone click 'Like it')
}

Comment {
Id,
AlbumId,
Text,
CreatedDate,
Ratings,
RatingsCount,
Replies { (collection of comment replies)
Text,
CreatedDate,
Ratings,
RatingsCount
}
}

Tag {
Id,
TagName,
AlbumsCount (use $inc: 1 when new album created with this tag
and $inc:-1 - once deleted)
}

我已将评论移动到单独的集合中(而不是将其嵌入专辑中),因为目前在 mongodb 中很难更新具有超过一层嵌套的文档。

现在查询:

1) 通过分页获取前 10 个最喜欢的专辑(标题、缩略图、观看次数、喜欢程度、作者和日期)。如果用户点击下一步,则获取下 10 个最喜欢的专辑等

db.albums.find().skip(0).limit(10).sort( { RatingsCount: -1 } );

2) 通过分页获得观看次数最多的前 10 个专辑。

db.albums.find().skip(0).limit(10).sort( { ViewsCount: -1 } );

3) 通过分页获取前 10 个讨论最多的专辑。

db.albums.find().skip(0).limit(10).sort( { CommentsCount: -1 } );

4) 获取最近创建的相册列表,分页但最多100个相册

db.albums.find().skip(0).limit(100).sort( { CreatedDate: -1 } );

5) 获取给定用户的所有相册(标题、缩略图、观看次数、喜欢程度、作者和日期)

db.albums.find({UserId: someUserId})

6) 获取特定专辑的详细信息,并通过分页仅显示前 10 条评论。 Next 将加载接下来的 10 条评论,依此类推。

album = db.albums.find({_id: someAlbumId});
comments = db.comments.find({AlbumId: someAlbumId }).skip(0)
.limit(10).sort( { RatingsCount: -1 ,CreateDate: -1 } );

7) 获取相关专辑列表。关系将通过专辑标签或专辑标题完成

请说明

8) 关键字搜索会搜索专辑的标题或标签字段。

db.albums.find( { $or : [ { Title : searchKey } , { Tags : searchKey } ] } )

注意:可能需要存储标签两次:小写用于搜索,小写用于显示

9) 当有人点击一个标签时,获取带有该标签的所有相册的列表

db.albums.find( {Tags : { $in: [tagName1, tagName2]}} ] } )

注意:使用 $in 运算符,您可以按多个标签名称进行搜索。

10)当有人点击分类链接时,获取10个分类相册的列表

db.albums.find({Category: val }).skip(0).limit(10).sort( { CreatedDate: -1 } );

11)获取按评分、日期等排序的评论

db.comments.skip(0).limit(10).sort( { RatingsCount: -1 } );

12)能否控制文档中新条目的顺序?

请说明

我认为现在您已经看到可以将关系数据库迁移到 MongoDB,并且相信您的应用程序使用 mongodb 和更高版本的模式会非常快;)。

希望这对您有所帮助。

P.S:如果 sql 2005 比我想你使用一些 .net 语言?

关于sql - 在从 RDBMS 切换之前需要 MongoDB 专家/开发人员的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5478045/

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