繁体   English   中英

主义mongo odm,注释和查询mongo ObjectId?

[英]Doctrine mongo odm, annotate and query mongo ObjectId?

嘿,我正在尝试在mongodb中映射一些文档,并且一切都像这样完美

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

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

但是,如果我有一个字段引用了另一个具有对象ID的文档,该怎么办:

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

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

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

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

我也试着像

 * @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?

任何帮助,谢谢!

编辑:

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

选项“ 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM