我已将CSV文件导入我的mongodb。 CSV根据需要使用mongo分隔符,并通过此查询从MySQL数据库接收:
SELECT * FROM csgo_users INTO OUTFILE 'b1.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';
此外,我试图通过它的导出功能从Sequel Pro接收CSV。
在我的csv中,我有一个长度为17个字符的字段。在MySQL数据库中,此字段的类型为VARCHAR,但包含17位数字
将csv导入mongo后,我得到了NumberLong
类型的字段,但我希望它为string
。
到目前为止我已经尝试过了:
varchar
更改为text
。--headerline
和--columnsHaveTypes
--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()
或this或this {"N",u","m","b","e","r","L","o","n","g"..}
尝试了很多解决方案
等
对于我尝试的最后一个例子,我没有字符串,但是对象,NumberLong
但是我希望它是“123456789”,而不是对象。
我正在使用MongoDB 3.4 this
所以,我的问题是,如何将“字段”类型从String
更改为message = format_html(
'''<div>
<p>{0} wants to join {1}!</p>
{% url 'accounts:detail' pk={2} as profile_url %}
<p>
View their
<a href="{{ profile_url }}">profile</a>
</p>
<div>Approve</div>
<div>Deny</div>
</div>
''',
self.request_user.username,
self.lab.name,
self.request_user.pk)
?
答案 0 :(得分:10)
您可以使用valueOf()将NumberLong的值作为javascript数值。
将NumberLong转换为数字:
NumberLong('5').valueOf() // 5
然后,您可以在数字上使用easilly toString()
来获取字符串值。
将NumberLong转换为字符串:
NumberLong('5').valueOf().toString() // "5"
答案 1 :(得分:2)
存在类型NumberLong
的原因是为了处理大量数字,类似于SQL上的BigInt
。 MongoDB依赖于JavaScript,该JavaScript最多具有53个整数位,在ES6中,最大的精确整数值为2 53 -1或9007199254740991,因此,将NumberLong转换为简单字符串是不可行的。不像前面的答案那么简单,这是一个例子:
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
使用特殊的字符$
将值转换为对象,以表示在处理值时要调用的函数,MongoDB在处理日常日常事务时处理此问题的方式JSON对象:
JSON.stringify(huge) // {"$numberLong":"987654321987654321"}