Mongodb 如何转换字段内值的数据类型(type)

{
    "_id" : ObjectId("625e60be100aeee3cf399b96"),
    "id" : "2elBjNSdBE2Y3f0j1mjrql",
    "followers" : "2264501.0",
    "genres" : "['c-pop', 'mandopop', 'taiwan pop', 'zhongguo feng']",
    "name" : "Jay Chou",
    "popularity" : "74"
}

可以看到 followers、genres、popularity都是字符串

followers+popularity字段 通过mongodb 自带的进行转换 写法可否优化简短

db.artists.find({'followers': {$type:2}}).forEach(
    function(doc){
        db.getCollection('artists').update({'_id': doc._id},{$set:{'followers': parseFloat(doc.followers)}})
    }
)

genres字段 通过Pymongo进行转换 速度堪忧

if type(a.get('genres')) == type(''):
        col.update_many(
            {'genres':{'$type':"string"}},
            {'$set':{'genres':eval(a.get('genres'))}},
        )

想请教大牛,有没有更好的方法,对了 原始数据是通过csv导入

# coding:utf-8

from pymongo import MongoClient
import datetime
import csv

def GetMongoDBcol():
    client = MongoClient('localhost', 27017)    # 连接
    db = client.spotify                         # 数据库
    col = db.artists                            # 数据表
    print('连接成功:')
    return col

def ImportMongoDB(fname,col):
    # fname: CSV文件
    # col: 集合
    csvFile = open(fname,'r',encoding='utf-8')  # 打开本地文件
    data = csv.DictReader(csvFile)              # 转换为字典格式打开
    s_time = datetime.datetime.now()            # 记录开始时间戳
    col.insert_many(data)                       # 插入库
    e_time = datetime.datetime.now()            # 记录结束时间戳
    num = col.count_documents({})               # 插入数据数量
    if num > 0:
        print('导入成功!')
        print('导入数量:' + str(num) + '条!')
        print('导入耗时:' + str((e_time-s_time).seconds) + '秒!')
    else: pass

def main():
    # 源文件路径
    file = r"C:\Users\i\OneDrive\Code\Data\artists.csv"
    # 获得表名字
    col = GetMongoDBcol()
    # 数据导入表
    ImportMongoDB(file,col)

main()

是导入时候的问题导致数据类型错误吗?



阅读 1.5k
1 个回答

可以截图一部分csv数据吗?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题