2012-10-20 2 views
0
{ 
    _id: ObjectId(...), 
    discussion_id: ObjectId(...), 
    slug: '34db', 
    posted: ISODateTime(...), 
    author: { 
       id: ObjectId(...), 
       name: 'Rick' 
      }, 
    text: 'This is so bogus ... ' 
} 

이것은 내가 지금까지했던 것입니다 : 내 코드에 따라서Mongo의 문서에 작성자 정보를 추가하는 방법은 무엇입니까?

class Discussion 
{ 

    /** 
    * @MongoDB\Id 
    */ 
     protected $id; 

    /** 
    * @MongoDB\ObjectId 
    */ 
    protected $discussion_id; 


    /** 
    * @MongoDB\String 
    */ 
    protected $slug; 


    /** 
    * @MongoDB\String <---------- IS THIS THE RIGHT DATA TYPE? 
    */ 
    protected $author; 

    /** 
    * @MongoDB\String 
    */ 
    protected $text; 


    /** 
    * @MongoDB\Date 
    */ 
    protected $createdAt; 

} 

:

$author_info = array(
      "userName" => $userName 
      ); 

     $discussion = new Discussion(); 
     $discussion->setCreatedAt(new \DateTime()); 
     $discussion->setAuthor($author_info); 
     $discussion->setText($listingInquiry); 

내 문제는 내가 그것을 잘 수행하고 있는가? 나는 저자 유형이 뭔가 다른 것일 필요가 있다는 느낌이 들었다. 제발 제안 해주세요.

감사

+0

당신이 Doctrine2 ODM을 사용하고 있습니까? – kmfk

+0

예 doctrone mongo odm (http://docs.doctrine-project.org/projects/doctrine-mongodb-odm/en/latest/index.html) – milof

+0

나는 대답했다 - 그러나 생각했다 : 저자는 이미 다른 컬렉션에 저장되어 있는가? ? 그걸 저장하는 방법이 바뀔 수도 있습니다. ObjectId를 생성하지 않고 대신 전달할 수 있습니다. – kmfk

답변

1

당신이 당신의 저자에 ObjectId을 원하는 경우에, 즉 포함 된 문서를 것 (또는 당신은 @MongoDB\Hash를 사용할 수 있습니다). 포함 된 문서에 대한

:

/** 
* @MongoDB\EmbeddedDocument 
*/ 
class Author 
{ 
    /** 
    * @MongoDB\ObjectId 
    */ 
    protected $id; 

    /** 
    * @MongoDB\String 
    */ 
    protected $name; 
} 

주 문서 코드에서

/** 
* @MongoDB\EmbedOne(targetDocument="[Namespace]\Author") 
*/ 
protected $author; 

에서 :

$author = new Author(); 
$author->setId(new \MongoId($userId)); 
$author->setName("Mark"); 

$discussion->setAuthor($author);