1

我的数据库中有两个集合-

> db.users.find().pretty()
        {
            "_id" : ObjectId("5281c15a617274166f150000"),
            "email" : "aerf@gmail.com",
            "nickname" : "Artem",
            "user_activities" : [
                {
                    "_id" : ObjectId("5281c19161727415d5000000"),
                    "activity_id" : ObjectId("5281c15a617274166f010000"),
                    ...
                },
                {
                    "_id" : ObjectId("5281c19161727415d6000000"),
                    "activity_id" : ObjectId("5281c15a617274166f020000"),
                    ...
                },
                       ...
            ]
        },
       ....

> db.monitor_symptoms.find().pretty()
    {
        "_id" : ObjectId("5281c15a617274166f000000"),
        "activities" : [
            {
                "_id" : ObjectId("5281c15a617274166f010000"),
                "name" : "ASW"
                        ...
                },
                {
                "_id" : ObjectId("5281c15a617274166f010000"),
                "name" : "BSW"
                        ...
                },
                ...
       ],
       ...
    },
    ...

我的应用程序中的以下模型支持此功能-

class User
  include Mongoid::Document
  field :email, type: String, :default => ""
  field :nickname, type: String, :default => ""
  embeds_many :user_activities
end

class UserActivity
  include Mongoid::Document
  embedded_in :user
  has_to_many :activities, inverse_of: nil
end

class MonitorSymptom
  include Mongoid::Document
  embeds_many :activities
end

class Activity
  include Mongoid::Document
  field :name, type: String
  embedded_in :monitor_symptom
end

接下来我试试——

2.0.0p0 :090 >   user = User.first
 => #<User _id: 5281c15a617274166f150000, email: "aerf@gmail.com", nickname: "Artem"

2.0.0p0 :091 > user.user_activities.new(activity_id: "5281c15a617274166f010000")
 => #<UserActivity _id: 5281c15a617274166f150000, activity_id: "5281c15a617274166f010000"> 

2.0.0p0 :092 > user.save

我发现一个错误:

Mongoid::Errors::MixedRelations: 问题:不允许通过关系关联从 UserActivity 文档引用 a(n) Activity 文档,因为 Activity 是嵌入的。摘要:为了从 UserActivity 正确访问一个(n)Activity,引用需要通过 Activity 的根文档。在一个简单的情况下,这将需要 Mongoid 为根存储一个额外的外键,在更复杂的情况下,如果 Activity 是多个级别的深度,则需要为层次结构中的每个父级存储一个键。解决方法:考虑不嵌入Activity,或者在应用代码中以自定义的方式进行key的存储和访问。

请帮我做这个参考。

4

1 回答 1

2

嵌入在其他模型中的模型除了嵌入之外不能有关系......因为您的案例activity嵌入其中,monitor_symptom它不能从其他文档中引用(您正在做的事情user_activity)。当您有如此复杂的结构时,最好使用文档之间的引用关系而不是嵌入。例如,在 user 和 user_activity、monitor_symptom 和 activity 之间,您可以轻松地在 activity 和 user_activity 之间建立参考关系。

于 2013-11-12T07:18:52.983 回答