我想手动存储引用,而不是让ODM使用DBRef类型。
我可以选择将我想要引用的_id存储为@String(例如“4e18e625c2749a260e000024”),但是如何在此字段中存储ObjectId
的实例呢?
new \MongoId("4e18e625c2749a260e000024") <-- what's the annotation for this type?
使用MongoId对象而不是字符串保存它将为我节省一半的空间。它与@Id注释使用的数据类型相同,但@Id只能在文档中使用一次。
完成此任务的正确注释是什么?
答案 0 :(得分:9)
更新:现在有这种类型的官方支持。在注释中使用@ObjectId
或@Field(type="object_id")
来使用ObjectId / MongoId类型。没有必要使用下面的解决方案。
另外,请使用github.com/doctrine/mongodb-odm中的最新主代码,并避免在网站上使用该版本(它已过时)。
解决方案(已弃用)
看起来还没有支持。我在IRC频道上讨论了这个问题,并在此打开了一张票:https://github.com/doctrine/mongodb-odm/issues/125
临时修复方法是定义自定义类型,并在Document类中使用@Field(type="objectid")
之类的注释。
以下是我用来完成此操作的自定义类型的代码。
/**
* Custom Data type to support the MongoId data type in fields
*/
class ObjectId extends \Doctrine\ODM\MongoDB\Mapping\Types\Type
{
public function convertToDatabaseValue($value)
{
if ($value === null) {
return null;
}
if ( ! $value instanceof \MongoId) {
$value = new \MongoId($value);
}
return $value;
}
public function convertToPHPValue($value)
{
return $value !== null ? (string)$value : null;
}
}
使用
注册\Doctrine\ODM\MongoDB\Mapping\Types\Type::addType('objectid', 'ObjectId' );
答案 1 :(得分:0)
尝试:
/** @Id(strategy="NONE") */