--queryFile 中的 ISODate

ISODate in --queryFile

我使用下面的 mongodump 代码根据日期转储记录,在 .sh 文件中:

$MONGODUMP_PATH -h $MONGO_HOST:$MONGO_PORT 
-d $MONGO_DATABASE  -c $MONGO_COLLECTION 
--queryFile subset.json

subset.json:

{ "TheDate": { "$gte": new Date(new Date().setDate(new Date().getDate() - 1)) } }

这不起作用,并产生错误:

Failed: error parsing query as json: invalid character '.' after constructor argument

但如果我更改 subset.json 以包含静态日期值,它会起作用:

{ "TheDate": { "$gte": ISODate("2016-06-14T07:12:23.051Z") } }

其中 ISODate("2016-06-14T07:12:23.051Z") 与之前一样等于 new Date(new Date().setDate(new Date().getDate() - 1))

但是我需要一个动态的日期值,就像第一种情况一样。 一直在网上寻找解决方案,但找不到...

有什么想法吗? 最好的问候

希望它对我有用!!!

问题是您的查询无效 JSON 因为它包含要评估的 JS 表达式(您的计算与日期)。

此外,我做了(快速而肮脏的)与 node 类似的事情,即用这个创建了一个文件 query.js实质上创建查询 JSON 并将其写入控制台的内容

var oid = Math.floor(new Date(new Date().getTime() - 1000 * 60 * 60 * 24) / 1000).toString(16) + "0000000000000000 ";

console.log('{ "_id": { "$gte": new ObjectId("' + oid + '") } }');

以便您现在可以像这样在 shell 中使用它

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

请参考下文link,