我有以下文件:
- 一份
User
文件。 - 嵌入文档,包含对(参见下一个文档)的引用
- 一份
Site
文件
每个用户都有一个嵌入文档数组,每个代表他关注的一个项目 - 一个网站,一个推特账户 - 可以选择标记他感兴趣的特定类别。每个嵌入文档都有对第三个文档的引用 -Site
文档(或Twitter
文件等)。
问题是 - 使用 MongoDB ODM,如何使用该站点的 id 获取选择关注给定站点的所有用户的文档?
(见下文(在文件之后)如何在 mongodb shell 中完成)
用户.php
<?php
use Doctrine\ODM\MongoDB\Mapping\Annotations as ODM;
/**
* @ODM\Document
*/
class User {
/**
* @ODM\Id
* @var string
*/
protected $id;
/**
* @ODM\EmbedMany(
* discriminatorMap={
* "site"="SiteFollow",
* "twitter"="TwitterFollow",
* }
* )
* @var ArrayCollection;
*/
protected $follows;
}
网站关注.php
<?php
use Doctrine\ODM\MongoDB\Mapping\Annotations as ODM;
/**
* @ODM\EmbeddedDocument
*/
class SiteFollow {
/**
* @ODM\Collection
* @var array
*/
protected $interestingCategories;
/**
* @ODM\ReferenceOne(targetDocument="Site", simple=true)
* @var Site
*/
protected $siteItem;
}
网站.php
<?php
use Doctrine\ODM\MongoDB\Mapping\Annotations as ODM;
/**
* @ODM\Document
*/
class Site {
/**
* @ODM\Id
* @var string
*/
protected $id;
/**
* @ODM\String
* @var string
*/
protected $name;
/**
* @ODM\String
* @var string
*/
protected $url;
}
mongo shell 中的用户文档示例:
db.User.findOne()
{
"_id": ObjectId("123"),
"follows": [
{
"interestingCategories": [
"PHP"
]
"siteItem" : ObjectId("OBJECT_ID_OF_SITE_DOCUMENT"),
"_doctrine_class_name" : "site"
}
]
}
Mongo shell 命令用于获取关注特定站点的所有用户:
db.User.find({"follows.siteItem": ObjectId("OBJECT_ID_OF_SITE_DOCUMENT")})