程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> MongoDB查詢中可以運行JavaScript

MongoDB查詢中可以運行JavaScript

編輯:DB2教程

以前並沒有留意用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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved