私は次のドキュメントを持っています:
User
ドキュメント。- への参照を含む埋め込みドキュメント (次のドキュメントを参照)
Site
ドキュメント_
各ユーザーは内部に埋め込みドキュメントの配列を持ち、それぞれがフォローしているアイテム (サイト、Twitter アカウント) を表し、興味のある特定のカテゴリをマークするオプションがあります。各埋め込みドキュメントには、3 番目のSite
ドキュメント (ドキュメント (またはドキュメント))への参照があります。Twitter
文書など)。
問題は、MongoDB ODM を使用して、特定のサイトをフォローすることを選択したすべてのユーザーのドキュメントを、そのサイトの ID を使用して取得するにはどうすればよいかということです。
(以下(ファイルの後に)mongodbシェルでどのように行われるかを参照)
ユーザー.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 シェルでのユーザー ドキュメントの例:
db.User.findOne()
{
"_id": ObjectId("123"),
"follows": [
{
"interestingCategories": [
"PHP"
]
"siteItem" : ObjectId("OBJECT_ID_OF_SITE_DOCUMENT"),
"_doctrine_class_name" : "site"
}
]
}
特定のサイトをフォローしているすべてのユーザーを取得するための Mongo シェル コマンド:
db.User.find({"follows.siteItem": ObjectId("OBJECT_ID_OF_SITE_DOCUMENT")})