【问题标题】:MongoMapper and "join tables" with propertiesMongoMapper 和带有属性的“连接表”
【发布时间】:2013-09-01 17:31:22
【问题描述】:

我有物品清单。这些项目可以属于多个列表。这很容易通过定义多对多关系来完成。

class List
  include MongoMapper::Document

  key :item_ids, Array
  many :items, :in => :item_ids
end

但我也希望对列表进行排序。一个项目可以在一个列表中的索引 2 上,而在另一个列表中的索引 4 上。通常我会使用带有“位置”字段的连接表,但我无法理解如何使用 MongoMapper 完成这样的事情,因为每个人似乎都建议不要在没有 SQL 的环境中使用连接表(这使得完美的感觉)。

在 MongoDB 中使用连接表是个好主意还是使用其他机制来完成此操作?和奖励点:我如何在 MongoMapper 中实现这一点?

【问题讨论】:

    标签: ruby-on-rails mongodb mongomapper


    【解决方案1】:

    item_ids 是一个数组。因此,它将是自然排序的 - 您可以简单地将项目按照您希望它们所在的顺序插入到您的 items 关联中。如果您想重新排序它们,只需按一些标准对 item_ids 数组进行排序并保存文档,或在您使用数组中的项目时对其进行排序。

    # When consuming the list
    @list.items.sort_by &:name
    
    # Or if you want to persist the order
    @list.item_ids = @list.items.sort {|item| ... }.map(&:id)
    @list.save
    

    【讨论】:

    • 嘿,克里斯,这是我实际尝试的第一件事,但 id 似乎被 MongoMapper 重新排序。最后,我查看了我的数据库设计并重写了它以更好地适应 nosql 解决方案,但问题仍然存在。我会尝试用我使用的测试来更新我的问题。
    • 这听起来像一个错误!应保留数组排序。如果您可以重现该问题,请在github.com/mongomapper/mongomapper/issues 提交错误报告
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-15
    • 2018-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多