加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – Doctrine MongoDb嵌入式文档 – 如何指定字段

发布时间:2020-12-13 17:22:22 所属栏目:PHP教程 来源:网络整理
导读:我正在使用带有Doctrine MongoDb包的Symfony 2. 有两个带映射的类: /** * @MongoDBDocument */class Consultant{ /** * @MongoDBId(strategy="NONE") */ protected $id; /** * @MongoDBEmbedMany(targetDocument="Specialization",strategy="set") */ pr
我正在使用带有Doctrine MongoDb包的Symfony 2.

有两个带映射的类:

/**
 * @MongoDBDocument
 */
class Consultant
{
    /**
     * @MongoDBId(strategy="NONE")
     */
    protected $id;

    /**
     * @MongoDBEmbedMany(targetDocument="Specialization",strategy="set")
     */
    protected $specs;
}

/**
 * @MongoDBDocument
 */
class Specialization
{
    /**
     * @MongoDBId
     */
    protected $id;

    /**
     * @MongoDBString
     */
    protected $name;

    /**
     * @MongoDBBoolean
     */
    protected $visible = true;
}

保存顾问后,Mongo记录如下所示:

{
   "_id": "1","name": "Manager","specs": {
     "0": {
       "_id": ObjectId("50d071ac6146a1f342000001"),"name": "Support","visible": false 
    },"1": {
       "_id": ObjectId("50d069336146a10244000000"),"name": "Orders","visible": false 
    } 
  } 
}

一切都很好,除了冗余字段’可见’.

有没有办法使用@EmbedMany注释指定Doctrine应该嵌入哪些字段?

解决方法

Specialization类使用 Document映射,该映射不适用于嵌入.你应该使用 EmbeddedDocument.

鉴于您希望以自己和嵌入的形式使用相同的类,最好创建一个使用MappedSuperclass注释的抽象类.在那里,您可以定义文档和嵌入文档中应该存在的任何字段映射.在您的情况下,您可以在继承文档类上保留可见性.

另外,请注意,通过使用set策略,您将嵌入式集合存储为对象而不是通常的数组.如果您要在非规范化的嵌入文档中索引字段,这可能会产生影响,因为您将无法使用multikey indexing.还可以在数字键之间创建间隙.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读