【发布时间】:2018-07-30 11:54:51
【问题描述】:
我有一个名为 Session 的对象,其中另一个名为 User 的根对象被声明为所有者。在 MongoDB 中,所有者字段被索引为唯一: 在 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的self 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 不同。
- 第二次执行 selectOne: 块仍然没有找到特定用户的 Session 对象。
- 所以要么“自我新建,保存块”是错误的,要么我有一个错误的选择查询。
【问题讨论】:
-
感谢您提供详细信息。你能做一个
Transcript show:的anASUser voyageId和(each at: 'owner.__id')。当你第二次运行它? +ASUser收藏的内容?当你做(each at: 'owner.name') = 'zack'时它工作正常吗? -
如下所述,该方法是在不同的数据库中创建新的 ASUser。 (ASUser 在 DB A 中,Session 在 DB B 中)。查看答案
-
我有这种感觉。这就是为什么我问
owner.name = 'zak'。很高兴你能解决它。