mongodb很多很多没有连接表

时间:2015-06-25 00:51:16

标签: ruby-on-rails mongodb mongoid

最初,我指定了联系has_many服务的关系。因此,服务具有contact_id的外键:

class Contact
  include Mongoid::Document
  field :name, type: String
end

class Service
  field :name, type: String
  field :contact_id, type: Integer
end

现在可以向服务添加其他联系人,因此服务有很多联系人。但是,添加的联系人是已经独立存在的联系人。所以我不想将一个实体嵌入另一个实体。联系和服务将始终独立生活。没有嵌入。

那么我应该将联系人的ID存储在服务数组中吗?换句话说,我的新模型将如下所示:

class Contact
  include Mongoid::Document
  field :name, type: String
end

class Service
  field :name, type: String
  field :contact_id, type: Integer
  field :contact_ids, type: Array, default: []
end

或者是否有更好的解决方案来解决这里的多对多问题(没有将一个文档嵌入另一个文档中)?

1 个答案:

答案 0 :(得分:0)

对于多对多,您没有36个选项:您实际上有2个:

  • 一侧的ID数组与您一样
  • 双方的ID数组。

"双方"很酷的事情。解决方案是您可以从两个集合中找到查询文档以获取链接。

书籍和作者的例子:

db.books.findOne()
{
    _id: 1,
    title: "The Great Gatsby",
    authors: [1, 5]
}

db.authors.findOne()
{
    _id: 1,
    firstName: "F. Scott",
    lastName: "Fitzgerald",
    books: [1, 3, 20]
}