我尝试使用Symfony中的一些引用创建MongoDB数据库。 在我的上下文中,我有2个文档客户和会议,一个客户可以许多会议,以便我做了什么:
Meeting.php
<?php
namespace FrontOfficeBundle\Document;
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
/**
* @MongoDB\Document
*/
class Meeting
{
/**
* @MongoDB\Id
* @MongoDB\ReferenceOne(targetDocument="Customer")
*/
protected $id;
/**
* @MongoDB\Field(type="timestamp")
*/
protected $creationDate;
...
Customer.php
<?php
namespace FrontOfficeBundle\Document;
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
/**
* @MongoDB\Document
*/
class Customer
{
/**
* @MongoDB\Id()
* @MongoDB\ReferenceMany(targetDocument="Meeting")
*/
protected $id;
/**
* @MongoDB\Field(type="string")
*/
protected $username;
...
然后当我运行命令行时:
php bin / console doctrine:mongodb:schema:update
我得到了:
没有为Document&#39; FrontOfficeBundle \ Document \ Meeting&#39;指定标识符/主键。每个文档都必须有一个标识符/主键。
我尝试使用 @MongoDB \ UniqueIndex(),但没办法。 我认为 @MongoDB \ Id 应该是一个标识符!!!
版本
有什么想法吗?
谢谢你。
答案 0 :(得分:0)
最后我找到了一个解决方案,首先我在文档客户中添加了一个名为$ meetings的字段,并在文档会议中添加了另一个$ customer:
<强> Customer.php 强>
/**
* @MongoDB\ReferenceMany(targetDocument="meeting", mappedBy="customer")
*/
protected $meetings;
<强> Meeting.php 强>
/**
* @MongoDB\ReferenceOne(targetDocument="customer", inversedBy="meetings")
*/
protected $customer;
然后运行命令行以生成setter和getter:
php bin / console doctrine:mongodb:generate:documents mybundleBundle
当我运行一个灯具(创建一个客户然后它的会议)时,一切正常,您会注意到您的文档中已经定义了 1到很多之间的关系(我正在使用罗盘显示mongoDB)作为 One-to-Squillions 模型(有关1对N关系的更多详细信息:(https://www.mongodb.com/blog/post/6-rules-of-thumb-for-mongodb-schema-design-part-1),这意味着儿子文档(会议)包含参考如下所示的父母:
<强>客户强>
<强>会议强>
在MongoDB中,@ MongDB / Id是主键和外键,永远不会尝试定义对此唯一字段的引用。
感谢您的关注。