【问题标题】:MongoDB Doctrine ODM change the collection name for a document at run timeMongoDB Doctrine ODM 在运行时更改文档的集合名称
【发布时间】:2013-06-24 14:53:32
【问题描述】:

我必须为每天注册的用户创建集合,所以如果我有 5 个用户,2 个在 2013 年 3 月 2 日注册,3 个在 2013 年 3 月 3 日注册,我将有 2 个集合

用户在没有集合的 YML 文件中声明

在项目中,我通过 CLI 进行类似这样的导入

      foreach($arUsers as $key=>$arUser)
  {

    $collection_name = "day_".$arUser['date'];


    $user = new User();

    /* Change the collection name to be dynamic  */
    $OdmMetaData = MeltApplication::getDocumentManager()->getClassMetaData( get_class($user) );
    $OdmMetaData->setCollection($collection_name);

    $user->setUserId($arUser['user_id']);
    $user->setEmail($arUser['email']);
    ....

    $this->getDocumentManager()->persist($user);
    $this->getDocumentManager()->flush();
  }

问题是,当我查看 mongoDB 时,我只看到一个名为 day_2013-03-03" 的集合,这是最后一个日期,如果我在 foreach 之后设置 MeltApplication::getDocumentManager()->flush(); end 语句,我应该把它全部保存在第一个集合 03-02 中。

是否有任何选项可以做到这一点,将它们分开保存?

谢谢

【问题讨论】:

    标签: mongodb doctrine-odm odm


    【解决方案1】:
    $data = $odm->getClassMetadata('NameEntity');
    $data->setCollection($collectionName);
    

    这就是答案。

    【讨论】:

      【解决方案2】:

      唯一的解决办法是重新初始化文档管理器

      【讨论】:

      • 你是怎么做到的?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-06
      • 1970-01-01
      • 1970-01-01
      • 2012-12-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多