Mysql 转换id为';s到具有#id';s

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的整数列都通

我正在将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的整数列都通过
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)强制转换它。如果您发布选择/插入代码,可能会有所帮助