使用ObjectID字段查找15分钟数据

时间:2016-08-29 11:24:30

标签: mongodb

我使用 ObjectID 查找最新15分钟数据。

查询查询:

db.data.find({ 
    _id: { 
        $gte: new ObjectId(
            Math.floor(new Date(ISODate().getTime() - 1000 * 60 * 15) / 1000).toString(16) + "0000000000000000"
        ) 
    } 
})

输出

{ "_id" : ObjectId("57c3ef6837ff7057a2ad3cca"), "User" : "Karthick", age: 26 }

{ "_id" : ObjectId("57c3ef6837ff7057a2ad3cce"), "User" : "Raja", age: 29 }

但是,我正在尝试进行数据转储,

mongodump --query '{ _id: { $gte: new ObjectId(Math.floor(new Date(ISODate().getTime() - 1000 * 60 * 15) / 1000).toString(16) + "0000000000000000") } }' --db test --collection data --username abcdef --password abc@123 --authenticationDatabase admin -o "mongodump"

错误

Failed: error parsing query as json: invalid character 't' in literal MaxKey (expecting 'x')   

我收到了上述错误。如何解决此问题或如何在cronjob中放置15分钟数据转储?

1 个答案:

答案 0 :(得分:3)

问题是你的查询是无效的JSON,因为它包含要评估的JS表达式(你的日期计算)。
所以你基本上必须制作一个脚本或做一些shell杂技,在将它传递给mongoexport之前生成查询JSON

您可能会发现this链接与python

完全相同

此外我做了(快速和肮脏)与节点类似的东西,即用这个内容创建了一个文件 query.js ,它基本上创建了你的查询JSON并将其写入控制台

var oid = Math.floor(new Date(new Date().getTime() - 1000 * 60 * 15) / 1000).toString(16) + "0000000000000000";
console.log('{ "_id": { "$gte": new ObjectId("' + oid + '") } }');

这样你现在就可以在你的shell中使用它了

mongoexport ... --query "$(node query.js)" ...

希望有所帮助