以前並沒有留意用JavaScript管理MongoDB,不過這個還是很有用的功能。特別是可以寫一些定時腳本,定期檢查數據庫,做一些管理任務。
1. mongo shell中可以直接運行JavaScript代碼
比如:
> new Date() ISODate("2013-12-12T07:37:00.074Z") > x = new Date(); ISODate("2013-12-12T07:37:05.724Z") > x.getTime(); 1386833825724 > var y = Date(); > y.getTime() Thu Dec 12 15:37:26.805 TypeError: Object Thu Dec 12 2013 15:37:21 GMT+0800 (CST) has no method 'getTime' >
a. new Date() 和 Date()不是一回事,參考
http://stackoverflow.com/questions/3505693/difference-between-datedatestring-and-new-datedatestring
如果想獲得epoch以來的毫秒數,必須用new Date()。
而Date(),似乎就只是一個函數,返回一個字符串而已。沒什麼大作用,反而容易混淆人的概念。
b. Date對象提供了getTime()
2. 查詢語句中,可以用$where operator來執行JavaScript函數, 比如:
db.display.find({$and: [{$where: function() {return new Date().getTime() / 1000 - this.last_active_time > 300}}, {status: "offline"}]})$where參考文檔:http://docs.mongodb.org/manual/reference/operator/query/where/
3. 可以將代碼寫到一個js文件中,然後用mongo命令執行
比如:下面將當前時間和last_active_time字段的值的差大於300秒的,狀態為offline的document找出來,並顯示。
cursor = db.display.find({$and: [{$where: function() {return new Date().getTime() / 1000 - this.last_active_time > 300}}, {status: "offline"}]}) while (cursor.hasNext()) { printjson(cursor.next()); }然後這樣執行:
mongo localhost/mydb test.js