ruby - 您将如何在 MongoDB 中有效地实现这些查询?

标签 ruby mongodb database-design database-schema nosql

链接有一个或多个标签,所以一开始嵌入标签似乎很自然:

link = { title: 'How would you implement these queries efficiently in MongoDB?'
         url: 'http://stackoverflow.com/questions/3720972'
         tags: ['ruby', 'mongodb', 'database-schema', 'database-design', 'nosql']}

如何有效地实现这些查询?

  • 获取包含一个或多个给定标签的链接(用于搜索带有给定标签的链接)
  • 获取不重复的所有标签列表(用于搜索框自动完成)
  • 获取最流行的标签(显示前 10 个标签或标签云)

上面表示链接的想法是基于MongoNY presentation ,幻灯片 38。

最佳答案

获取包含“value”标签的链接:

db.col.find({tags: "value"});

获取包含“val1”、“val2”标签的链接:

db.col.find({tags: { $all : [ "val1", "val2" ] }});

获取不重复的所有标签列表:

db.col.distinct("tags");

获取最流行的标签 - 这不是可以在现有数据库上查询的东西,您需要做的是添加一个流行度字段,每当查询获取文档时更新它,然后使用排序进行查询字段设置为流行度。

更新:针对人气特征提出的解决方案。 尝试添加以下集合,我们称之为标签。

doc = {标签:字符串,弹出:整数}

现在,一旦您进行查询,您就会收集所有显示的标签(这些标签可以聚合并异步完成)所以假设您最终得到以下标签:“tag1”、“tag2”、“tag3”。

然后调用更新方法并增加弹出字段值:

db.tags.update({tag: { $in: ["tag1", "tag2", "tag3"] }}, { $inc: { pop: 1 }});

关于ruby - 您将如何在 MongoDB 中有效地实现这些查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3720972/

相关文章:

ruby-on-rails - 如何为特定方法启用猴子补丁?

MySQL:如何实现行级安全(如 Oracle 的虚拟专用数据库)?

php - 需要 MySQL 数据库模式来处理复杂的数据导入

php - 如何在 php 7 中连接到 mongodb 数据库

java - 辩论 - 从数据库层还是Java层调用Web服务?

ios - 如何在 NWConnection 中设置 UDP 广播的发送方端口

ruby - 如何将变量插入字符串?

ruby-on-rails - Postgres 数组字段上的 ActiveAdmin 过滤器

javascript - 使用 mongo 集合对象中的元素键更改对象数组中对象的顺序

java - MongoDB Java 驱动程序 : distinct with sort