Doctrine mongo odm,注释和查询mongo ObjectId?

时间:2014-01-08 15:26:22

标签: php mongodb symfony doctrine doctrine-odm

嘿那里我试图用mongodb映射一些文件,一切都像这样完美

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

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

但是,如果我有一个字段,可以参考另一个具有Object id的文档:

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

但是我必须设置什么类型?

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

当我使用@MongoDB\Id上方的注释时 它失败了

我也尝试使用像

这样的refferencene
 * @MongoDB\ReferenceOne(targetDocument="Bundle1:Other")

当我在其他地方做某事时,让它无论参数总是返回0

          $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"}

所以当然是零计数,所以问题的一部分也是如何查询其他是唯一的mongo id的所有东西?

提前感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

编辑:

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

选项“简单”是真的,应该适合你! Doctrine的默认参考格式是DBRef()

您可以通过以下方式查询:

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

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

ObjectId()是PHP中mongo的本机字段类型,它是\ MongoId

如果你想使用@MongoDB \ Id,你必须导入:

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

编辑注释时要注意缓存!

提示:如果你创建了getId(),这个方法将返回一个字符串,而不是一个\ MongoId