以错误的 ID 存储的嵌入式根对象

Embedded root object stored with wrong id

我有一个名为 Session 的对象,其中另一个名为 User 的根对象被声明为所有者。在 MongoDB 中,owner 字段被索引为唯一的: 在 Session>>ofUser 中:我发送以下消息:

ofUser: anASUser
    ^ (self selectOne: [ :each |
        (each at: 'owner.__id') = anASUser voyageId ])
    ifNil: [ self new
        owner: anASUser;
        save ]

这是用户数据库中的用户:

{"_id":"5b5e006643d001c78f2e88d6",
    "#instanceOf":"ASUser",
    "#version":"-551686239533400057",
    "name":"zack"}

这是调试器中ASUser自身的voyageId值:

OID(5B5E006643D001C78F2E88D6)

这是从 ofUser 方法保存的 AKMSession 对象:

{"_id":"5b5ef4350f2532682e2e9536",
    "#instanceOf":"AKMSession",
    "#version":"-928582753905278919",
    "action":null,
    "owner":
       {"collection":"ASUser",
           "#instanceOf":"ASUser",
           "__id":"5b5ecf7a0f2532d63a2e952f"},
       "recipe":null}

为什么 AKMSession 对象的 owner.__id 与 ASUser Id 不同?

总结一下:

好吧,这是我的错。我混合了 MongoDB,方法是在错误的数据库中永久创建 ASUsers 作为不同的集合(没有索引,所以它总是可以创建一个新条目)。

因此,如果您为用户访问一个数据库并将具有嵌入式用户的对象存储在另一个数据库中,请注意,这可能会发生。

虽然 ASUser Class 有 ASUser>>voyageRepository 返回正确的数据库,但这种情况正在发生。