嵌入或引用关系

2024-01-16

我使用 mongodb 和 mongoid gem,我想得到一些建议。

我有一个应用程序,其中用户has many市场与市场has many产品。 我需要在属于用户的所有(或任何)市场中搜索特定价格范围内的产品。

哪种关系更适合这种情况,嵌入关系还是引用关系?

我目前使用引用,看起来像这样

class User
  has_many :markets
end

class Market
  belongs_to :user
  has_many :products
end

class Product
  belongs_to :calendar
  belongs_to :user
end

对于搜索,我使用这个查询

Product.where(user_id: current_user.id).
  in(market_id: marked_ids).
  where(:price.gte => price)

我很好奇,由于 mongodb 是一个面向文档的数据库,如果我在这种情况下使用嵌入式文档,我会在性能或设计上受益吗?


对于您的情况,我建议使用参考数据。因为我认为您需要单独操作每个集合(您需要能够通过 _id 编辑/删除/更新“产品”,并执行一些其他复杂的查询,当您有单独的集合时,这会更容易和有效收藏)。

同时我会存储some用户集合中的完整嵌入数据,只是为了加快向访问者浏览器的显示速度。假设您有一个用户页面,您想要在其中显示用户的个人资料以及前 5 个市场和前 20 个产品。您可以将最新的前 5 名和前 20 名嵌入到用户的文档中,并在出现新市场/产品时更新这些嵌入的对象。在这种情况下 - 当您显示用户页面时,您只需对 MongoDB 进行 1 次查询。所以这可以作为缓存。如果访问者需要查看更多产品,他会转到下一页“产品”并在 MongoDB 中查询单独的“产品”集合。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

嵌入或引用关系 的相关文章

  • Rails autoload_paths 中的错误?

    我的代码中遇到一个奇怪的错误 我有一个 Rails 应用程序 库中有以下两个文件 lib module one module two class one rb module ModuleOne module Moduletwo class
  • 是否可以禁用特定 jQuery Ajax 调用的 Turbolinks 以防止页面刷新和滚动?

    我有一个 Rails 5 应用程序 非常想使用 Turbolinks 在应用程序中 有几个 PATCH ajax 调用 它们只是用新数据更新服务器 但不需要担心更新页面的状态 每当这些 ajax 请求返回时 Turbolinks 就会刷新页
  • Ruby/Rails - 如何创建类并从控制器访问它

    我一直在尝试使用一些不同的 gem 在 Rails 3 中显示谷歌地图 但遇到了一些问题 幸运的是我发现了这个https github com YouthTree bhm google maps https github com Youth
  • 使用 Paperclip 保存文件而不上传

    我有一个简短的问题 是否可以保存文件而不实际通过表单上传 例如 假设我正在查看电子邮件中的附件 并且我想使用回形针保存它们 我该怎么做呢 我是否必须在某处手动调用 save file 或类似的东西 任何帮助将非常感激 我有一个 rake 任
  • Rails 3.2 子域和设计

    我有一个应用程序 用户可以登录到他们的公司子域 我用的是设计 此代码将用户从根域重定向到子域 def after sign in path for resource or scope scope Devise Mapping find sc
  • 在 Google App Engine 上连接 Mongoose

    我已在 Google App Engine 上成功部署了自定义 Node js 应用程序 但是 我在启动应用程序时遇到问题 因为猫鼬在尝试连接时超时 令人沮丧的是 猫鼬在我的本地计算机上以完全相同的参数连接得很好 我的 MongoDb UR
  • Ruby on Rails:有关 validates_presence_of 的问题

    我的基于 ActiveRecord 的模型中有一个关系 如下所示 belongs to foo 我的模型应该始终在其中定义 foo 才能有效 我的问题是 当使用 validates presence 时 使用哪一个是合适的 validate
  • 使用 ActiveRecord::Relation 时的 RSpec 匹配器

    所以这是我要测试的方法 def self by letter letter where lastname LIKE letter order lastname end 简单问一下 letter 后面的百分号到底有什么作用 跟格式化有关系吗
  • 如何使用 RSpec 测试 javascript 重定向?

    我正在使用 xhr post 与控制器交互 并且我期待重定向 在 js erb 中 我有 window location href address 手动测试 浏览器会正确重定向 我如何使用 RSpec 测试它 response should
  • MongooseError:操作 `orders.deleteMany()` 缓冲在 10000 毫秒后超时

    当我运行我的应用程序时npm run seeder然后我面临这个错误 我仔细检查了我的数据库连接 没问题 另外 我检查了我的 ordermodels 文件也没有问题 我用过MongoDB的compass没有任何问题 我不知道为什么显示buf
  • 从表单中选择枚举以设置角色

    Ruby on Rails 4 1 我正在将 Devise 与枚举角色一起使用 目前 它在创建用户时使用默认角色 我想在创建用户的表单中添加一个字段来设置枚举角色 I read this https github com RailsApps
  • factory_girl + rspec 似乎并没有在每个示例后回滚更改

    类似于这里描述的问题 http rpheath com posts 411 how to use factory girl with rspec http rpheath com posts 411 how to use factory g
  • Rails 中的漂亮路径

    我有一个类别模型 我使用默认的脚手架来路由它resources categories 我想知道是否有办法改变路径 category id to category name 我补充道 match categories name gt cate
  • 如何使用 spring data mongodb mongotemplate 插入嵌入文档

    我需要在现有的事件文档中插入一个新的轨道 下面是我的类结构 class Event String id List
  • 与heroku配合使用的统计引擎

    我有一个 Heroku Rails 应用程序 需要处理一些重要的数字 并且我需要使用像 R 这样的统计库 更糟糕的是 MatLab 我正在寻找以下任何问题的答案 是否有不需要二进制文件的功能齐全的统计包 GEM 是否可以将 R 二进制文件作
  • 重命名猫鼬中的字段[重复]

    这个问题在这里已经有答案了 我有两个 JSON 对象 每个对象都有一个名字字段 我想将名字重命名为名称 还想使用猫鼬将现有的名字值导入到名称 Schema const mongoose require mongoose const Sche
  • 新 Rails 应用程序出现问题

    我刚刚创建了一个新的rails应用程序 在CL上 使用rails new 我使用的是4 2 6 但似乎在我对应用程序执行任何操作之前我遇到了错误 first config environments development rb 53 in
  • 如何从另一个 .rb 文件访问模块内和类内的 Ruby 方法

    我想知道如何从另一个 rb 文件访问此模块中的方法 module Decisioning module Decision class OfferProxy lt FinanceApplication Offer def my method
  • 在 Meteor 应用程序中实现 MongoDB 2.4 的全文搜索

    我正在考虑向 Meteor 应用程序添加全文搜索 我知道 MongoDB 现在支持此功能 但我对实现有一些疑问 启用文本搜索功能的最佳方法是什么 textSearchEnabled true 在 Meteor 应用程序中 有没有办法添加索引
  • GSON 将带有日历的对象反序列化为带有 Mongo 日期的 json 并返回

    我有一些实体 其中包含一些日历属性 我想以将它们存储为 GSON 序列化 JSON 中的日期的方式对其进行序列化 因为 Mongo 可以将 date 存储为 new ISODate 我们通常通过使用 ExclusionStrategy 忽略

随机推荐

  • 展平 Java 8 可选管道中的元素列表

    我有一个id值可以是null 然后我需要用这个调用一些服务id获取交易列表并获取第一个不null从列表中进行交易 目前我有这个工作代码 Optional ofNullable id map id gt service findTrades
  • 预加载 SVG 图像

    我有大约一百个简单的 SVG 图像 它们存储在大约五个不同的图像文件夹中 目前 当需要显示它们时 就立即检索它们 这在大多数情况下是有效的 但有时确实会导致闪烁 我想消除这种闪烁 有没有办法在需要之前预加载这些图像 以便将它们缓存 我在这里
  • Spring Data Rest:“无法从 @EntityScan 配置 LocalContainerEntityManagerFactoryBean”

    我有一个 REST 服务 spring boot 应用程序 包含两个独立的 Maven 项目 第一个myapp data包括 Spring Data JPA Spring Data Rest Entities 和 Rest Reposito
  • HTML 表单在点击提交按钮时执行一些“操作”

    我想了解 HTML 表单 例如 我有两个用于名字和姓氏的输入文本字段以及一个提交按钮 单击提交按钮时 我希望网页显示类似以下内容的内容 您的名字是 名字 姓氏
  • 为什么 List.ForEach 允许修改其列表?

    如果我使用 var strings new List
  • 为 nextjs 默认服务器上的静态文件服务设置缓存控制标头

    我正在使用默认的 nextjs 服务器通过此命令运行我的 nextjs 程序next start 但是 我无法更改公共文件夹下文件的缓存控制标头 有没有什么方法可以在不设置自定义服务器的情况下设置缓存控制标头 有未记录的功能或错误 但它有效
  • 如何检查批处理脚本中的参数(或变量)是否为数字

    我需要检查传递给 Windows 批处理文件的参数是否为数值 如果检查也适用于变量 那就太好了 我找到了一个answer https superuser com a 404359到类似的question https superuser co
  • 找不到用于调试 .NET 源代码的 .cs 文件

    我尝试按照以下步骤设置调试 NET 源MDSN 演练 https msdn microsoft com en us library cc667410 aspx 符号缓存已正确设置 检查 启用 NET Framework 源步进 也是如此 但
  • 加入 Google Bigquery

    我知道正在开展工作来改进 Bigquery 上的联接功能 不是在这里咆哮 但如果不能正确使用联接 将很难分析 广告 的 太字节 数据集 好吧 回到问题 我有两个表 一个是 600 Megs 另一个是 50 Megs 我确实尝试进行连接 但出
  • 使用 cmake 和命令行构建 MSVC 项目

    再会 让我们有一个源文件main cpp and a CMakeLists txt包含下一个文本的文件 cmake minimum required VERSION 2 6 project tmp set CMAKE CXX FLAGS W
  • 准备好的语句中空 LIKE 的性能影响

    我设置了一个 GiSTpg trgm http www postgresql org docs current interactive pgtrgm html上的索引name的栏目files table 准备好的语句的简化查询如下所示 SE
  • 将对象传递给 NSThread 选择器

    当我创建 NSThread 时 我向它传递了一个我希望进程知道的数字 我可以理解如何设置数字 但我不知道如何从线程选择器方法中读取数字 以便我可以将其传递给计时器 你怎么做呢 void setthread 在这里将数字传递给选择器就好了 N
  • 如何在 ColdFusion 中获取计划任务列表和上次运行结果?

    我们正在尝试为我们的 cron 作业 CF Java SQLServer 等 构建一个仪表板 以便我们可以看到上次运行的时间 结果是什么以及计划下次运行的时间 有没有办法使用 CFAdmin API 或一些未记录的
  • 日期时间支持的格式化语言?

    DateTime 让您可以根据当前文化进行格式化 默认支持哪些文化 我想到的使用场景this Date Value ToString MMMM 如果文化设置为英语 美国 则将打印 January 但如果文化设置为法语 ca 则将打印 Jan
  • Blogger 著名模板 - 分页后修复或替换?

    Blogger Notable 模板的主页底部的帖子分页链接仅显示 更多帖子 链接 它缺少 以前的帖子 它还缺少传统的 主页 链接 更多帖子 链接正确地消失在帖子的最后一页上 我希望至少启用一个 以前的帖子 链接 这似乎是 Google 故
  • 没有 Storyboard 的 Segue

    我正在尝试制作一个在每个视图上都有一个主页按钮的应用程序 但我正在寻找一种在单击此按钮时导航到主屏幕的方法 而不需要为 StoryBoard 上的每个屏幕到主页创建一个 物理 链接屏幕 我尝试使用这段代码 IBAction func btn
  • 用于在 Internet Explorer 7 中打开多个页面的 Windows 控制台命令

    如何使用单个 DOS 命令在 Internet Explorer 7 中打开多个页面 批处理文件是执行此操作的唯一方法吗 Thanks 批处理文件将作为一种快速但肮脏的解决方案 echo off setlocal openurl set u
  • Jenkins Pipeline 有“多个候选版本”并且正在选择旧版本

    我配置了一个 Jenkins 多分支管道 它应该从远程 GIT 存储库获取源代码以进行构建 詹金斯似乎 随机 选择一个旧的提交来构建 并在构建日志文件中显示消息 多个候选修订 我的管道看起来像 checkout class GitSCM b
  • XML:如何将一个文件读入另一个文件

    我有一个文件 A xml 包含如下内容
  • 嵌入或引用关系

    我使用 mongodb 和 mongoid gem 我想得到一些建议 我有一个应用程序 其中用户has many市场与市场has many产品 我需要在属于用户的所有 或任何 市场中搜索特定价格范围内的产品 哪种关系更适合这种情况 嵌入关系