我在学说手册中找不到如何做一个非常简单的查询。我不知道如何使用MongoDb管理SQL“JOIN ...”的等价物。
abstract class Topic
{
/**
* @MongoDB\Id
*/
protected $id;
}
abstract class Message
{
/**
* @MongoDB\Id
*/
protected $id;
/**
* @MongoDB\Date
*/
protected $date;
/**
* @MongoDB\ReferenceOne(targetDocument="Topic")
*/
protected $topic;
}
abstract class User
{
/**
* @MongoDB\Id
*/
protected $id;
/**
* @MongoDB\ReferenceMany(targetDocument="Message")
*/
protected $messages;
}
我有用户ID和主题ID。
我想:
1)查找用户的最新消息
2)从用户
$ dm-> find('User',$ id) - > getMessages()给我一个“PersistentCollection”
$ dm-> find('User',$ id) - > getMessages() - > getValues()为我提供了消息数组,但后来我必须使用PHP循环,我确定有一个创建查询的方法......
我应该使用map还是reduce?
有人能帮助我吗?谢谢!
答案 0 :(得分:1)
首先,您必须修复数据库架构:
消息可以属于多个用户吗?
通常一条消息只能有一个作者,所以我将更改消息文档以存储作者User id
:
class Message
{
/**
* @MongoDB\ReferenceOne(targetDocument="User")
*/
protected $author;
//Othe methods...
}
然后查找来自用户的最新消息:
class User {
/**
* @ReferenceOne(
* targetDocument="Message",
* mappedBy="author",
* sort={"date"="desc"}
* )
*/
protected $lastMessage;
//Other methods...
}
并查找有关某个主题的最新消息:
class User {
/**
* @ReferenceOne(
* targetDocument="Message",
* mappedBy="author",
* criteria={"topic" : "sport"}
* sort={"date"="desc"}
* )
*/
protected $lastMessageAboutSport
//Other methods...
}