MongoDB 与JavaScript

本文详细介绍了如何使用JavaScript在MongoDB环境中执行管理任务,包括使用mongoshell运行简单示例,解释newDate()与Date()的区别,并通过JavaScript函数执行复杂查询,如基于时间差筛选文档。此外,还展示了如何使用JavaScript生成和执行js文件,作为MongoDB驱动程序的替代方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以前并没有留意用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'
> 


new Date()和Date()的区别

a. new Date() 和 Date()不是一回事,参考

http://stackoverflow.com/questions/3505693/difference-between-datedatestring-and-new-datedatestring

如果想获得epoch以来的毫秒数,必须用new Date()。

而Date(),似乎就只是一个函数,返回一个字符串而已。没什么大作用,反而容易混淆人的概念。


b. Date对象提供了getTime()


查询语句中,可以用$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/


2. 运行js文件

比如:下面将当前时间和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

这样就可以用newLISP来生成和执行js文件,在没有newLISP版本的MongoDB driver的时候,是一个不错的解决方案。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值