【问题标题】:Converting a mySQL table with id's to a MongoDB table with _id's将具有 id 的 mySQL 表转换为具有 _id 的 MongoDB 表
【发布时间】:2011-04-12 03:20:27
【问题描述】:

我正在将一个 MySQL 表传输到 MongoDB。我的 MySQL 表中有一个主键 id,我希望将这个 id 转换为 MongoDB 中的 _id

我用php的MongoCollection::insert( $mysql_array );

但是它不起作用,因为如果我设置$mysql_array['_id'],mongo 会将它视为字符串而不是 MongoId。我尝试了$mysql_array['_id'] = new MongoId( $id ),但它不允许我覆盖默认的_id 值。我看到我的 MySQL 的所有整数列都被MongoCollection::insert() 转换为字符串。如果我可以将MongoCollection::insert() 设置为正确传输整数,它可能会起作用。

【问题讨论】:

    标签: mysql mongodb database


    【解决方案1】:

    将 _id 类型转换为这样的整数值...

    (int) $mysql_array['_id']

    你会发现自己在 mongoDB 中经常这样做

    【讨论】:

      【解决方案2】:

      ObjectId 是 Mongo 中的一种特殊类型,但 _id 属性不必是这种类型。您不能将字符串或数字强制转换为ObjectId,您也不应该这样做。

      我认为问题在于您的 insert 工作正常,但是当您查看数据库中的数据时,_id 属性看起来不像 _id: ObjectId("1234")(如果原始 ID 是 1234) .这是应该的,而且完全没问题。

      ObjectId 的想法是它有一个预定义的结构,可以保证(大部分)在 Mongo 集群中是唯一的,但这也意味着它必须有这个结构,否则它不是一个 @987654328 @。

      您还提到所有整数列都转换为字符串。 PHP 和 PHP 库在涉及类型时是出了名的草率,所以当它们来自 MySQL 结果集时,请确保它们不是已经是字符串的情况。在最坏的情况下,您必须在将值插入 Mongo 之前显式转换它们。

      【讨论】:

        【解决方案3】:

        由于其特定特性(12 字节 -> 4 字节时间戳、3 字节客户端主机名、2 字节 PID、3 字节 inc 值生成的 24 字符,您将无法将任意字符串值转换为 Mongo ObjectId )。

        要么放弃在集合的 _id-fields 中使用 MongoId 类型,而是使用 MySQL-ID 作为字符串(这不是问题并且最有意义),要么让 Mongo 为您生成文档的 _id ,如果您希望能够使用 MongoId 函数(假设您正在使用 PHP),这也是一个合适的解决方案: The MongoId class

        选择第二种解决方案,您仍然可以将 MySQL-ID 存储在文档的另一个字段中,例如 id 或 *mysql_id* 以供以后引用。

        关于 (int) 和 (string) 值的问题:您确定它们是来自 MySQL 数据库的 PHP 整数吗?如果是这样,它们通常应该在 Mongo 中存储为整数。用 var_dump() 检查它,如果不兼容,用 (int) 转换它。如果您发布选择/插入代码可能会有所帮助...

        【讨论】:

          【解决方案4】:

          使用MongoCollection::save(),您的阵列应该可以工作。

          【讨论】:

            猜你喜欢
            • 2011-04-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-08-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多