MongoDB查询中可以运行JavaScript

来源:未知 责任编辑:责任编辑 发表时间:2013-12-18 11:37 点击:

以前并没有留意用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
    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • db2管理工具小结
    • DB2数据库的导出与导入(Windows客户端)
    • db2 CLP中如何换行
    • DB2查看表结构及所用表语句
    • DB2 · CREATE TABLESPACE
    • 使用DB2对象:创建模式、表和视图
    • DB2数据库逻辑卷的复制
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1