开发者社区> 问答> 正文

如何导出格式化的时间戳用mongoexport命令?

请教一下:
mongoexport 命令在导出时候可以用-q 参数来过滤,比如:
-q '{request_time:{$gte:new Date(1334592000000)}}',
我想问的是如何把某时间戳的字段按 "%Y-%m-%d %H:%M:%S" 这种格式输出?
也就是想把导出的内容中的时间戳转为日期时间格式,并生成csv,这个-q参数如何写?

展开
收起
落地花开啦 2016-01-31 10:20:53 8945 0
1 条回答
写回答
取消 提交回答
  • 阿里云论坛版主,QQ 1978638808

    有时,我们可能想使用mongoexport的查询参数导出集合的某一特定部分。
    例如,一个notebook集合(collection),每个notebook文档(document)的文档都有一个生产日期属性。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    {

        "_id" : ObjectId("531ce460000000019b9643bc"),
        "company" : "Samsung",
        "date" : ISODate("2014-03-09T22:00:00Z"),
        "price" : 2000,
        "brand" : "Ultrabook",

    }
    {

        "_id" : ObjectId("531ce460000000019b9643ba"),
        "company" : "Sony",
        "date" : ISODate("2014-03-08T22:00:00Z"),
        "price" : 1500,
        "brand" : "Vaio",

    }
    {

        "_id" : ObjectId("531ce460000000019b9643bd"),
        "company" : "Apple",
        "date" : ISODate("2014-03-07T22:00:00Z"),
        "price" : 2250,
        "brand" : "MacbookPro",

    }
    {

        "_id" : ObjectId("531ce460000000019b9643be"),
        "company" : "Apple",
        "date" : ISODate("2014-03-06T22:00:00Z"),
        "price" : 1200,
        "brand" : "MacbookAir",

    }
    {

        "_id" : ObjectId("531ce460000000019b9643bf"),
        "company" : "Samsung",
        "date" : ISODate("2014-03-05T22:00:00Z"),
        "price" : 1000,
        "brand" : "Ultrabook",

    }
    mongoexport的定义如下:

    1
    mongoexport --db --collection --query --out
    主要的问题是在查询中不能使用ISODate("")对象作为时间的查询条件,必须转换成Date对象。
    例如,我们要查找生产日期位于2014-03-09T22:00:00Z 和 2014-03-07T22:00:00Z之间的苹果公司的笔记本(notebook);

    mongoexport
    --db test --collection notebooks --query '{ company:"Apple", date: {
    $lt: ISODate("2014-03-09T22:00:00Z") , $gte:
    ISODate("2014-03-07T22:00:00Z")} }' --out example.
    1
    mongoexport --db test --collection notebooks --query '{ company:"Apple", date: { $lt: ISODate("2014-03-09T22:00:00Z") , $gte: ISODate("2014-03-07T22:00:00Z")} }' --out example.json
    将得到以下错误:

    ERROR

    ERROR: too many positional options

    有两种方法可以把ISODate对象转成Date对象,方法如下:

    (1)使用mongo shell中的JavaScript脚本;
    var a = ISODate('2014-03-10T22:00:00Z');
    a.getTime()

    1
    2
    var a = ISODate('2014-03-10T22:00:00Z');
    a.getTime()
    (2)把 ISODate数据转成毫秒,然后在转成Date对象;

    ISODate("2014-03-10T22:00:00Z").valueOf()

    现在可以使用正确的Date时间进行查询:

    1
    mongoexport --db test --collection notebooks --query "{ company:"Apple", date: { $lt: new Date(1394402400000) , $gte: new Date(1394229600000)} }" --out example.jso
    最后会在当前文件夹下得到一个json文件,只包含一个文档记录;

    {

        "_id" : ObjectId("531ce460000000019b9643bd"),
        "company" : "Apple",
        "date" : ISODate("2014-03-07T22:00:00Z"),
        "price" : 2250,
        "brand" : "MacbookPro",

    }
    1
    2
    3
    4
    5
    6
    7
    {

        "_id" : ObjectId("531ce460000000019b9643bd"),
        "company" : "Apple",
        "date" : ISODate("2014-03-07T22:00:00Z"),
        "price" : 2250,
        "brand" : "MacbookPro",

    }

    2019-07-17 18:36:35
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载