今天用mongodb的mongodump備份數據,添加了一個-q命令,用來進行日期篩選
具體的命令大概是這樣的
mongodump -h localhost:27017 -u admin -p xxx -d dbname -c c1 -o D:\dbname -q "{"StartTime":{"$lt":ISODate("2020-12-02T00:00:00.000+08:00")}}" --authenticationDatabase admin
結果報錯 Failed: error parsing query as json: invalid character '-' after constructor argument
我將{"StartTime":{"$lt":ISODate("2020-12-02T00:00:00.000+08:00")}}放到db中查詢就不會報錯
命令大概是這樣的
db.getCollection('c1').find({"StartTime":{"$lt":ISODate("2020-12-02T00:00:00.000+08:00")}})
為什么放到find里面就正常,放到mongodump命令中就報錯呢
提示說是構造函數后面的無效字符”-“,這個提示誤導了我,折騰了老半天我才發現,原來是雙引號的鍋
db.getCollection('c1').find是個函數,里面傳遞的是一個json對象,ISODate的構造函數傳入的是一個字符串,這是完全沒有問題的
但是mongodump是個命令,-q后面跟的是一個字符串,字符串用雙引號引起來,鍵用雙引號好像沒有問題,但是值ISODate構造函數傳入的字符串也用了雙引號,好像就出問題了,我把ISODate構造函數中的雙引號改成單引號貌似就沒有問題了。。。。