MongoDB类型从数字到字符串的更新



我已经将CSV文件导入了我的mongoDB。CSV具有根据需要的分离器,并通过此查询从MySQL数据库中收到:
SELECT * FROM csgo_users INTO OUTFILE 'b1.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY 'n';
另外,我尝试从续集Pro接收具有其导出功能的CSV。
在我的CSV中,我有17个字符长的字段。在MySQL数据库中,此字段具有VARCHAR类型,但包含17位数字。
在将CSV导入Mongo之后,我使用了NumberLong类型的字段,但我希望它是string
我已经尝试过:

  • MySQL中的更改类型从varchartext
  • 尝试使用其他标志--headerline--columnsHaveTypes
  • 导入CSV
  • 还尝试使用标签--fields
  • 尝试命令:

    db.csgo_users.find({"steam_id": {$type: 18}})
           .toArray()
           .map(function(v){
               v.steam_id = new String(v); 
               db.csgo_users.save(v)
            })
    

或以下:

db.csgo_users.find({"steam_id": {$type: 18}})
  .toArray()
  .map(function(v){
     v.steam_id = new String(v.toSring());
     db.csgo_users.save(v)
  })


- 我尝试了很多forEach()的解决方案, 等。


在我的尝试的最后一个示例中,我没有字符串,而是对象,{"N",u","m","b","e","r","L","o","n","g"..},但我希望它是" 123456789",而不是对象。
我正在使用mongodb 3.4文档。
,我的问题是,如何将"字段"类型从NumberLong更改为String

您可以使用valueof()将数字的值作为JavaScript编号值。

铸造号码为数字:

NumberLong('5').valueOf() // 5

然后,您可以在您的电话号码上使用Easilly toString()获取字符串值。

铸造数字到字符串:

NumberLong('5').valueOf().toString() // "5"

存在类型NumberLong是有原因的,要处理大量数字,类似于SQL上的BigInt。MongoDB依靠JavaScript,最多有53位整数位,在ES6中,最大的确切积分值为2 53 -1或9007199254740991,因此,"转换"从数字到简单的字符串并不像以前的答案那样简单,以下是一个示例:

var huge = NumberLong("987654321987654321");
huge.valueOf(); // 987654321987654300
huge.toString(); // NumberLong("987654321987654321")
huge.valueOf().toString(); // 987654321987654300

在此示例中,很明显,JavaScript在使用valueOf()时正在汇总数字,并且缺乏任何明智的响应和文档,我在这种情况下进行了解决方法,使用Regex从toString()函数中删除任何非数值字符:

huge.toString().replace(/[^d]/g, '') // 987654321987654321

它并不漂亮,但是它可以运行,任何其他更好的解决方案始终受到赞赏。作为奖励事实,使用JSON.stringify使用特殊的char $将值转换为对象,以表示要在处理该值时调用的函数,而MongoDB处理此问题的方式在处理常见的日常日常JSON对象时:

JSON.stringify(huge) // {"$numberLong":"987654321987654321"}

更新:使用mongoDB转换数据的正确方法是使用投影与聚合:

db.getCollection('mycollection').aggregate([
    {$match: {
        /* your match query object */
    }},
    {$project: {
        _id: 0, // to ignore the document id
        myStringObj: {$toString: '$myNumberLongObj'} // from NumberLong to String
    }},
], {allowDiskUse: true});

相关内容

  • 没有找到相关文章

最新更新