MongoDB查询中可以运行JavaScript

浏览:
字体:
发布时间:2013-12-15 22:18:51
来源:

以前并没有留意用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
>更多相关文章
24小时热门资讯
24小时回复排行
资讯 | QQ | 安全 | 编程 | 数据库 | 系统 | 网络 | 考试 | 站长 | 关于东联 | 安全雇佣 | 搞笑视频大全 | 微信学院 | 视频课程 |
关于我们 | 联系我们 | 广告服务 | 免责申明 | 作品发布 | 网站地图 | 官方微博 | 技术培训
Copyright © 2007 - 2024 Vm888.Com. All Rights Reserved
粤公网安备 44060402001498号 粤ICP备19097316号 请遵循相关法律法规
');})();