根据 MongoDB 中的日期导出集合的子集

Export subset of a collection base on a Date in MongoDB

我正在尝试从 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

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

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

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

Integer value representing the number of milliseconds since January 1, 1970, 00:00:00 UTC, with leap seconds ignored (Unix Epoch; but consider that most Unix timestamp functions count in seconds).

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

第一阶段 将生成一个 collection 的愿望文档:

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.

第二阶段将导出这个新的collection:

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