MongoDB新手在这里。我有第一种方法是参考,我的主要疑问是我是否为我的情况使用了适当的策略(手动参考(。
在同一个数据库中处理 2 个集合(用户、消息(,让我们以存储在用户集合中的文档为例:
array (
'_id' => new MongoId("5231817277758e660c7202c4"),
'uname' => 'pluto',
'pwd' => new MongoInt32(1234567),
'email' => 'pluto1@gmail.com',
'phone_home' => new MongoInt64(23409238),
'phone_work' => new MongoInt64(54389724),
'phone_mobile' => new MongoInt64(9823422),
'visible' => new MongoInt32(1),
)
以及存储在消息集合中的文档示例(从其他用户发送给"冥王星"上方的用户(:
array (
'_id' => new MongoId("524358102660b2c70b8b4567"),
'from_uid' => '5231817277758e660c7202d7',
'to_uid' => '5231817277758e660c7202c4',
'object' => 'mongo manual Ref',
'content' => 'is that the correct approach?',
'datetime' => '2013-09-25 23:39:28',
)
登录的用户("pluto"(可以看到他从其他用户那里收到的所有消息,但是,我不打算打印"from_uid"值,我想将其替换为发件人的用户名。
我的主要疑问是手动引用是否是这种情况的正确方法,因为使用这种技术(如果我没有错过理解所有内容(,打印消息列表将涉及:
- 打印邮件列表的"查询">
- 另一个"查询",用于从其他集合中检索每条消息的用户名。此外,如果用户收到了 1000 条消息,则此方法将不得不运行 1001 查询?
我的第二个疑问是是否有办法直接合并或替换两个游标的结果
鉴于您的用例,复制一点数据并将有关发送用户的一些必要字段存储为嵌入式文档(在本例中为用户名(可能是可以的。
array (
'_id' => new MongoId("524358102660b2c70b8b4567"),
'from_user' => array(
'uid' => '5231817277758e660c7202d7',
'uname' => 'mars'
),
'to_uid' => '5231817277758e660c7202c4',
'object' => 'mongo manual Ref',
'content' => 'is that the correct approach?',
'datetime' => '2013-09-25 23:39:28',
)
这种方法意味着当您查询发送给用户的消息(您已经知道to_uid
(时,您将获得所有具有正确 id 的消息到from_user
,但也已经显示其用户名。
现在,您只需要在需要有关用户的更多信息时查询 - 例如获取他们的个人资料等,而不是查询 1000+ 次......