将带有id的mySQL表转换为带有_id' s的MongoDB表

我正在将MySQL表转移到MongoDB。我的MySQL表中有一个主键
id
,我希望将这个
id
转换为MongoDB中的
_id
。 我用php的
MongoCollection::insert( $mysql_array );
但它不起作用,因为如果我设置
$mysql_array['_id']
它被mongo视为String而不是MongoId。我试过
$mysql_array['_id'] = new MongoId( $id )
但它不允许我覆盖默认的
_id
值。我看到我所有MySQL的整数列都被转换为字符串
MongoCollection::insert()
。如果我可以设置
MongoCollection::insert()
来正确传输一个整数,它可能会工作。     
已邀请:
将_id转换为像这样的整数值... (int)$ mysql_array ['_ id'] 你会发现自己在mongoDB中做了很多这样的事情     
ObjectId
是Mongo中的一种特殊类型,但
_id
属性不一定是这种类型。你不能强迫字符串或数字变成
ObjectId
,你不应该。 我认为问题是因为你认为你的
insert
有效,但当你查看数据库中的数据时,
_id
属性看起来不像
_id: ObjectId("1234")
(如果原始ID是1234)。这是应该的,它完全没问题。
ObjectId
的想法是它有一个预定义的结构,使得它(大多数)保证在Mongo集群中是唯一的,但这也意味着它必须具有这种结构,否则它不是
ObjectId
。 您还提到所有整数列都转换为字符串。 PHP和PHP库在类型方面是众所周知的,所以确保当它们来自MySQL结果集时,值不是已经是字符串的情况。最糟糕的情况是,在将值插入Mongo之前必须显式地转换值。     
由于其特定的特性(12个字节 - > 4个字节时间戳生成的24个字符,3个字节的客户端主机名,2个字节的PID,3个字节的inc值),您将无法将任意String值转换为Mongo ObjectId。 您要么放弃在集合的_id-fields中使用MongoId类型,而是将MySQL-ID用作字符串(这不是问题并且最有意义),或者让Mongo为您生成文档'_id,这是如果你想能够使用MongoId函数(假设你正在使用PHP),这也是一个合适的解决方案: MongoId类 选择第二个解决方案,您仍然可以将MySQL-ID存储在doc的另一个字段中,例如id或* mysql_id *以便稍后引用它们。 关于你关于(int)和(string)值的问题:你确定它们是来自MySQL DB的PHP整数吗?如果是这样,它们通常应该作为整数存储在Mongo中。使用var_dump()进行检查,如果不兼容,请使用(int)进行检查。如果您发布您的选择/插入代码,它可能会有所帮助......     
使用
MongoCollection::save()
,你的阵列应该工作。     

要回复问题请先登录注册