- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我们在 SQL2005 中有这些表:
这种类型的结构可以在 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/
是否有用于手动测试的代码覆盖工具?比如我新写了30行代码,编译,然后运行,有什么办法可以快速验证这30行都运行了吗? 另外,后来,在我将代码 checkin 正式版本后,有什么方法可以验证测试部门在进
老实说,这是一个家庭作业问题,但我已经浪费了好几个小时,而且无法正确解决。它返回错误数量的结果或错误的数据: 我需要选择参与指导电影和/或在电影中表演的每个人以及他们所做的次数,如果至少 5 次。 有
我正在尝试测试 MacOS 的应用内购买。输入测试用户凭据后,App Store 提示:“当前收据无效或 ds 人员 ID 不匹配。”并且购买失败。 最佳答案 我尝试了很多方法来解决这个问题。 Get
我正在为 Jenkins 使用 ActiveDirectory 插件,因此用户必须使用他们的凭据登录到 Jenkins。然后用户在 Jenkins 中被称为 joe.doe,这很完美。 当同一个人 c
如何从 Infopath 人员/组选取器检索电子邮件地址?当我将人员/组选取器添加到 infopath 表单时,我只得到 3 个字段 DisplayName、AccountId、AccountType
在 Snow Leopard 中,可以在 iCal 事件中显示空闲/忙碌时间。我搜索了 CalStore.framework 的 header ,但找不到任何描述该字段的属性。如何检索日历事件的忙/闲
是否有人成功地从专门针对 SharePoint 2013 的新建或编辑表单中获取用户(个人或组)字段的值? 我已经尝试了通过搜索互联网找到的所有解决方案以及我自己能想到的所有解决方案,所有结果都为空白
所以我需要将一个 Twitter 帐户添加到 ABRecordRef 中。然而,最快的方法似乎是获取社交资料属性的多值引用,创建它的可变版本,查找它是否有 Twitter 条目,如果已经有,则创建
我正在尝试将使用 Tomcat(最初是 5.5,但可以与 7 一起使用)在 MyEclipse 中开发的应用程序部署到我们的演示服务器 (Sun Java Web Server 7)。不幸的是,所有设
我是一名优秀的程序员,十分优秀!