2014-01-08 3 views
2

Эй Там Im пытается сопоставить некоторые документы в MongoDB и все работает идеально, как этотDoctrine mongo odm, annotate и query mongo ObjectId?

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

/** 
* @MongoDB\Field(type="string",name="text") 
*/ 
protected $text; 

, но что, если у меня есть поле с референс на другой документ с идентификатором объекта, как:

... 
other:ObjectId("823789473938ab"), 
... 

, но что мне нужно установить как тип?

/** 
* @MongoDB\Field(type="?",name="other") 
*/ 
protected $other; 

, когда я использую аннотации выше @MongoDB\Id он не

я также судимое использовать refferencene как

* @MongoDB\ReferenceOne(targetDocument="Bundle1:Other") 

оставляя его argumentless всегда возвращает 0, когда я действительно STH как этот где-то еще

  $others=$dm 
       ->createQueryBuilder('Bundle1:Thing') 
       ->field('other') 
       ->equals('ObjectId("516c0061975a299edc44b419")') 
       ->getQuery() 
       ->execute()->count(); 

запрос выглядит как:

doctrine.INFO: MongoDB query: {"find":true,"query":{"other":"ObjectId(\"516c0061975a299edc44b419\")"},"fields":[],"db":"maself","collection":"thing"} 

так конечно Theres нулевой отсчет, поэтому часть вопроса также как запросить для всех вещей, где другой уникальный идентификатор Монго?

за любую помощь спасибо заранее!

ответ

1

Edit:

@MongoDB\ReferenceOne(targetDocument="Bundle1:Other", simple=true) 

Опция "простой" верно, должно работать для вас! Упоминание формат по умолчанию для Доктрины DBRef()

Вы можете запросить его:

$qb->field('other')->references($OtherObject) 

или

$qb->field('other')->equals(new \MongoId('01243efe..')) 

ObjectId() является собственным типом поля для Монго в PHP его \ MongoId

если вы хотите использовать @MongoDB \ Id вам необходимо импортировать:

use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB; 

Будьте осторожны с кешем при редактировании аннотаций!

Советы: Если вы сделаете GetId(), этот метод возвращает строку, а не \ Mongoid

+0

эй, спасибо! @MongoDB \ id отлично работает, как я уже сказал. как бы выглядела аннотация с getId()? я думаю, что я не получаю его на работу –

+0

Я также обновил свой ответ –

+0

Я тоже обновил свой ответ;) –