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),
)
以及存储在邮件集合中的文档示例(从其他用户发送到“pluto”上方的用户):
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'值,我想用发件人的用户名替换它。
我的主要疑问是,手动引用是否适合这种情况,因为使用这种技术(如果我不会错过任何理解),打印一条消息列表将涉及:
我的第二个疑问是,是否有办法直接合并或替换两个游标的结果
答案 0 :(得分:0)
根据您的用例,可能可以复制一些数据,并将有关发送用户的一些必要字段存储为嵌入式文档 - 在本例中为用户名。
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次以上...