以错误的 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 不同?
总结一下:
- 第一次执行,当没有特定用户的Session对象时,执行ifNil:Block,创建所有者为ASUser的Session对象,保存到MongoDB
- 所有者 __id 与 ASUser 的 OID 不同。
- 第二次执行select一:块仍然没有找到与特定用户的Session对象
- 所以要么 "self new, save block" 有误,要么我有一个错误的 select 查询。
好吧,这是我的错。我混合了 MongoDB,方法是在错误的数据库中永久创建 ASUsers 作为不同的集合(没有索引,所以它总是可以创建一个新条目)。
因此,如果您为用户访问一个数据库并将具有嵌入式用户的对象存储在另一个数据库中,请注意,这可能会发生。
虽然 ASUser Class 有 ASUser>>voyageRepository 返回正确的数据库,但这种情况正在发生。
我有一个名为 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 不同?
总结一下:
- 第一次执行,当没有特定用户的Session对象时,执行ifNil:Block,创建所有者为ASUser的Session对象,保存到MongoDB
- 所有者 __id 与 ASUser 的 OID 不同。
- 第二次执行select一:块仍然没有找到与特定用户的Session对象
- 所以要么 "self new, save block" 有误,要么我有一个错误的 select 查询。
好吧,这是我的错。我混合了 MongoDB,方法是在错误的数据库中永久创建 ASUsers 作为不同的集合(没有索引,所以它总是可以创建一个新条目)。
因此,如果您为用户访问一个数据库并将具有嵌入式用户的对象存储在另一个数据库中,请注意,这可能会发生。
虽然 ASUser Class 有 ASUser>>voyageRepository 返回正确的数据库,但这种情况正在发生。