我使用 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分钟数据转储?
答案 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)" ...
希望有所帮助