【问题标题】:Export subset of a collection base on a Date in MongoDB根据 MongoDB 中的日期导出集合的子集
【发布时间】:2018-03-13 12:21:30
【问题描述】:

我正在尝试从 mongoDB 导出数据

mongoexport -d MY_DB_NAME -u DB_USER -p _REDACTED_ -c person \
-q "{ '$and':[ { 'hasActiveAck':{ '$ne':false }}, { 'creationDate':{'$gte': new Date(1506816000),  '$lte': new Date(1509404400)} }]}" \
--fields '_id,email' --type=csv --out people_oct.json

问题是这会提取 0 行

如果我调用这个查询

db.getCollection('person') 
.find({  
$and:[  
  {  
     hasActiveAck:{  
        $ne:false
     }
  },
  {  
    creationDate:{ 
        $gte:new Date(1506816000) ,
        $lte:new Date(1509408000)
        }
  }
 ]
 }).count();

结果是0

但如果我使用 ISODate 而不是这样的 Date 运行查询:

db.getCollection('person') 
.find({  
$and:[  
  {  
     hasActiveAck:{  
        $ne:false
     }
  },
  {  
    creationDate:{ 
        $gte:ISODate("2017-10-01T00:00:00.000Z") ,
        $lte:ISODate("2017-10-31T00:00:00.000Z")
        }
  }
  ]
  }).count();

结果是 58k+ 行

我做错了什么?

一些细节:

mongoexport --version

mongoexport version: r3.2.11
git version: 45418a84270bd822db0d6d0c37a0264efb0e86d2
Go version: go1.7
 os: linux
 arch: amd64
 compiler: gc
OpenSSL version: OpenSSL 1.0.1f 6 Jan 2014

mongo --version

MongoDB shell version: 3.0.14

mongod --version

db version v3.0.14

【问题讨论】:

  • 你的目标是什么??导出数据?或使用$gte:new Date(... ?
  • 我正在尝试导出数据
  • 您检查过@JiříPospíšil 解决方案吗?不适合你??
  • 我做到了,但还是没有运气

标签: mongodb date aggregation-framework mongoexport isodate


【解决方案1】:

Date 构造函数采用毫秒数,而不是秒数。

new Date(1506816000).toISOString()
"1970-01-18T10:33:36.000Z"

new Date(1506816000000).toISOString()
"2017-10-01T00:00:00.000Z"

表示自 1 月 1 日以来的毫秒数的整数值, 1970 年 00:00:00 UTC,忽略闰秒(Unix 纪元;但是 考虑到大多数 Unix 时间戳函数以秒为单位)。

【讨论】:

    【解决方案2】:

    尝试将问题分为两个阶段。

    第一阶段将生成包含所需文档的集合:

    db.person.aggregate([
        { $match : 
            {    $and:[ 
                 { hasActiveAck:{ $ne:false } }, 
                 { creationDate:{ 
                                  $gte:ISODate("2017-10-01T00:00:00.000Z") 
                                 ,$lte:ISODate("2017-10-31T00:00:00.000Z")
                                }
                 }]
            } 
        },
        {
            $out: "people_oct"
        }
    ])
    

    这里你必须$out doc。

    第二阶段将导出这个新集合:

    mongoexport --db MY_DB_NAME --collection people_oct --type=csv --out people_oct.json
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-24
      • 1970-01-01
      • 2013-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多