Php 为什么MongoID生成不同的值?

Php 为什么MongoID生成不同的值?,php,mongodb,doctrine,doctrine-odm,Php,Mongodb,Doctrine,Doctrine Odm,我有一个带有用户表的关系数据库,有用户id等。然而,评论系统存储在Mongo和 $author = new Author(); $userID = 1; $author->setId( new \MongoId( $userID ) ); <--- different ID generated everytime $discussion = new Discussion(); $discussion->setCreatedAt(new \DateTi

我有一个带有用户表的关系数据库,有用户id等。然而,评论系统存储在Mongo和

$author = new Author();
$userID = 1;
$author->setId( new \MongoId( $userID ) ); <--- different ID generated everytime

$discussion = new Discussion();
             $discussion->setCreatedAt(new \DateTime());
             $discussion->setAuthor($author);
$author=新作者();
$userID=1;
$author->setId(new\MongoId($userID));setCreatedAt(new\DateTime());
$discussion->setAuthor($author);
每次生成的ID都是不同的,所以我有像5082a694253b4a1201000000、5082a55e253b4a1f05000000这样的值

如何重新关联到用户ID(例如用户ID 1)?或者干脆忘掉整个新的MongoID业务,将用户ID存储在文档中?

从:

公共MongoId::\构造([string$id=NULL])

$id: 用作id的字符串。必须是24个十六进制字符。如果将无效字符串传递给此构造函数,则构造函数将忽略该字符串并创建一个新的id值

这就是为什么,即使你给MongoId一个id,它也不适合24个十六进制字符。所以MongoId忽略它并生成一个新的

我认为您只需要按原样定义UserId:

$author = new Author();
$author->setUserId($userID);

这是因为
MongoId
设计用于生成这些字符串,如果您不输入
ObjectId
,它将尝试创建一个新字符串。另外,不要使用
datetime
而使用
MongoDate
,它将正确转换为mongodb标准。想法?我不知道他们的
datetime
确实正确地链接到了
mongodate
,但是如果他们说它必须链接,我已经环顾了四周,它似乎很管用,谢谢你的检查。