2 回答

TA貢獻1963條經驗 獲得超6個贊
以前并沒有留意用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'
>
如果想獲得epoch以來的毫秒數,必須用new Date()。
而Date(),似乎就只是一個函數,返回一個字符串而已。沒什么大作用,反而容易混淆人的概念。
b. Date對象提供了getTime()
2. 查詢語句中,可以用$where operator來執行JavaScript函數, 比如:
db.display.find({$and: [{$where: function() {return new Date().getTime(
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

TA貢獻1827條經驗 獲得超8個贊
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'
>
如果想獲得epoch以來的毫秒數,必須用new Date()。
而Date(),似乎就只是一個函數,返回一個字符串而已。沒什么大作用,反而容易混淆人的概念。
b. Date對象提供了getTime()
2. 查詢語句中,可以用$where operator來執行JavaScript函數, 比如:
db.display.find({$and: [{$where: function() {return new Date().getTime(
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
- 2 回答
- 0 關注
- 715 瀏覽
添加回答
舉報