Mysql 转换id为';s到具有#id';s
我正在将MySQL表传输到MongoDB。在我的MySQL表中有一个主键Mysql 转换id为';s到具有#id';s,mysql,mongodb,database,Mysql,Mongodb,Database,我正在将MySQL表传输到MongoDB。在我的MySQL表中有一个主键id,我希望将这个id转换为MongoDB中的\u id 我使用php的MongoCollection::insert($mysql\u数组) 但是它不起作用,因为如果我设置$mysql\u array[''u id'],mongo会将其视为字符串而不是MongoId。我尝试了$mysql\u array[''u id']=new MongoId($id),但它不允许我覆盖默认的\u id值。我看到所有MySQL的整数列都通
id
,我希望将这个id
转换为MongoDB中的\u id
我使用php的MongoCollection::insert($mysql\u数组)代码>
但是它不起作用,因为如果我设置$mysql\u array[''u id']
,mongo会将其视为字符串而不是MongoId。我尝试了$mysql\u array[''u id']=new MongoId($id)
,但它不允许我覆盖默认的\u id
值。我看到所有MySQL的整数列都通过MongoCollection::insert()
转换为字符串。如果我可以将MongoCollection::insert()
设置为正确传输整数,它可能会工作。使用MongoCollection::save()
则数组应该工作。使用MongoCollection::save()
则数组应该工作。将{u id转换为如下整数值
(int)$mysql\u数组[''u id']
您会发现自己在mongoDB中经常这样做typecast将_id转换为如下的整数值
(int)$mysql\u数组[''u id']
您会发现自己在mongoDB中经常这样做,ObjectId
在Mongo中是一种特殊类型,但是\u id
属性不一定是这种类型。不能将字符串或数字强制转换为对象ID
,也不应该
我假设您所看到的问题是您的insert
工作正常,但是当您查看数据库中的数据时,\u id
属性看起来不像\u id:ObjectId(“1234”)
(如果原始id是1234)。这是它应该做的,而且很好
ObjectId
的思想是,它有一个预定义的结构,保证(大部分)在Mongo集群中是唯一的,但这也意味着它必须有这个结构,否则它就不是ObjectId
您还提到,所有整数列都转换为字符串。PHP和PHP库在类型方面是出了名的草率,所以请确保当值来自MySQL结果集时,它们不是字符串。最糟糕的情况是,在将值插入Mongo之前,必须显式强制转换这些值。ObjectId
是Mongo中的一种特殊类型,但是\u id
属性不必是这种类型。不能将字符串或数字强制转换为对象ID
,也不应该
我假设您所看到的问题是您的insert
工作正常,但是当您查看数据库中的数据时,\u id
属性看起来不像\u id:ObjectId(“1234”)
(如果原始id是1234)。这是它应该做的,而且很好
ObjectId
的思想是,它有一个预定义的结构,保证(大部分)在Mongo集群中是唯一的,但这也意味着它必须有这个结构,否则它就不是ObjectId
您还提到,所有整数列都转换为字符串。PHP和PHP库在类型方面是出了名的草率,所以请确保当值来自MySQL结果集时,它们不是字符串。最糟糕的情况是,在将值插入Mongo之前必须显式强制转换这些值。由于Mongo对象的特定特性,您将无法将任意字符串值转换为Mongo对象ID(12字节->由4字节时间戳、3字节客户端主机名、2字节PID、3字节inc值生成的24个字符) 您可以放弃在集合的_id-fields中使用MongoId类型,而是将您的MySQL id用作字符串(这不是问题,也是最有意义的),或者让Mongo为您生成文档的_id,如果您希望能够使用MongoId函数(假设您使用的是PHP),这也是一个合适的解决方案: 选择第二个解决方案,您仍然可以将MySQL id存储在文档的另一个字段中,如id或*MySQL\u id*以供以后引用
关于(int)和(string)值的问题:您确定它们是MySQL数据库中的PHP整数吗?如果是这样,它们通常应该作为整数存储在Mongo中。使用var_dump()检查它,如果不兼容,则使用(int)强制转换它。如果您发布选择/插入代码,可能会有所帮助。由于Mongo ObjectId的特定特性(12字节->24个字符,由4字节时间戳、3字节客户端主机名、2字节PID、3字节inc值生成),您将无法将任意字符串值转换为Mongo ObjectId 您可以放弃在集合的_id-fields中使用MongoId类型,而是将您的MySQL id用作字符串(这不是问题,也是最有意义的),或者让Mongo为您生成文档的_id,如果您希望能够使用MongoId函数(假设您使用的是PHP),这也是一个合适的解决方案: 选择第二个解决方案,您仍然可以将MySQL id存储在文档的另一个字段中,如id或*MySQL\u id*以供以后引用 关于(int)和(string)值的问题:您确定它们是MySQL数据库中的PHP整数吗?如果是这样,它们通常应该作为整数存储在Mongo中。使用var_dump()检查它,如果不兼容,则使用(int)强制转换它。如果您发布选择/插入代码,可能会有所帮助