通过mongoimport转换为MongoDB

Ank*_*dar 8 mongodb mongoimport

我已经以csv中的格式下载了大量数据.我正在使用mongoimport将数据输入MongoDB进行处理.如何获取MongoDB认可的日期格式?

带标题的示例数据

Date, Open Price, High Price, Low Price, Last Traded Price , Close Price, Total Traded Quantity, Turnover (in Lakhs)
04-Apr-2014,901,912,889.5,896.75,892.85,207149,1867.08
03-Apr-2014,908,918,897.65,900,900.75,156260,1419.9
02-Apr-2014,916,921.85,898,900.7,900.75,175990,1591.97
Run Code Online (Sandbox Code Playgroud)

Sal*_*ali 18

据我所知,没有办法做到这一点mongoimport.

但这可以通过导入数据然后运行以下脚本来实现(请注意,在Neil的Lunn脚本中,没有任何一点可以使用monthes,因为mongo可以通过这样做正确地转换你的日期new Date('04-Apr-2014')):

db.collName.find().forEach(function(el){
    el.dateField = new Date(el.dateField);
    db.collName.save(el)
});
Run Code Online (Sandbox Code Playgroud)

PS如果时区如此重要(我假设它不是,如果只有没有时间信息的日期),您可以只更改本地计算机上的时区,然后运行查询.(感谢Neil Lunn澄清此事)


Hat*_*ala 6

从Mongo 3.4版开始,在使用mongoimport导入数据时,可以使用--columnsHaveTypes选项指定字段的类型。 这是参考链接。

样品mongoimport语法如下:

mongoimport --db XYZ --collection abc --type tsv --fields id.int32(),client_name.string(),app_name.auto(),date.date() --columnsHaveTypes --file "abc.tsv" --verbose
Run Code Online (Sandbox Code Playgroud)


Nei*_*unn 5

你基本上有三个选项,好像你可以使用mongoimport直接导入CSV,它不知道如何从这种格式转换日期.

  1. 通过任何方式将CSV输入转换为JSON格式.对于您的日期值,您可以使用该工具可识别的扩展JSON语法表单.然后,您生成的结果JSON可以传递给mongoimport.

  2. 编写自己的程序,通过读取CSV输入并进行正确的转换来导入数据.

  3. 按原样导入CSV内容,然后使用您选择的语言直接在MongoDB集合中操作数据.

第三种选择的一种方法是循环结果并相应地更新日期:

var months = [
    "Jan", "Feb", "Mar", "Apr", "May", "Jun", 
    "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
];

db.collection.find({ },{ "Date": 1 }).forEach(function(doc){

    var splitDate = doc.Date.split("-");

    var mval = months.indexOf( splitDate[1] );
    mval = ( mval < 10 ) ?  "0" + mval : mval

    var newDate = new Date( splitDate[2] + "-" + mval + "-" + splitDate[0] );

    db.collection.update(
        { _id: doc._id },
        { "$set": { "Date": newDate } }
    );

})
Run Code Online (Sandbox Code Playgroud)

这样可以确保您的日期转换为正确的BSON日期格式,并具有您期望的相同匹配日期值.

请注意"本地"时区转换,您将希望以UTC时间存储.