数据库 
首页 > 数据库 > 浏览文章

MongoDB中javascript脚本编程简介和入门实例

(编辑:jimmy 日期: 2024/11/19 浏览:3 次 )

注:作者使用的mongodb版本为2.4.7。

入门例子
复制代码 代码如下:
conn = new Mongo();
db = conn.getDB("db-name");  //选择数据库
db.auth("user-name","password");  //用户验证

var map = function() {
    split_result = this.sentence.split(" ");
    for (var i in split_result) {
        var word = split_result[i].replace(/(^\s*)|(\s*$)/g,"").toLowerCase(); //去除了单词两边可能的空格,并将单词转换为小写
        if (word.length != 0) {
            emit(word, 1);
        }
    }
}

var reduce = function(key, values) {
    print(key+":"+Array.sum(values));
    return Array.sum(values);
}

db.data.mapReduce(
    map,
    reduce,
    {out:{merge:"mr_result"}}
)

保存为test01.js,在终端中运行:
复制代码 代码如下:$ mongo test01.js
运行结束后可以在集合mr_result中查看mapreduce结果。

值得注意的是,在js脚本中如果直接:
复制代码 代码如下:db.mr_result.find();
是无法输出结果的。

应该使用下面的方式输出结果:
复制代码 代码如下:conn = new Mongo();
db = conn.getDB("db-name");  //选择数据库
db.auth("user-name","password");  //用户验证

var cursor = db.mr_result.find();

while(cursor.hasNext()) {
    r = cursor.next();
    print(r["_id"] + "\t" + r["value"]);
}
保存为test02.js,运行:
复制代码 代码如下:$ mongo test02.js
结果如下:
复制代码 代码如下:
a       1
code    1
collection      1
consider        1
contains        1
documents       1
error   1
follow  1
following       3
found   1
get     1
i       2
in      1
link    1
map-reduce      1
of      1
on      1
operations      1
orders  1
prototype       1
that    1
the     4
this    1
when    1

使用load()函数

load()函数用于引入其他文件,这为代码重用提供了便利。 最简单的情形是,把数据库连接操作的代码放在一个单独的文件里,在当前目录建立lib,在lib目录下创建文件base_operation.js,内容如下:
复制代码 代码如下:
function BaseOperation() {

    /*
    连接数据库,返回连接对象
    */
    this.getDB = function() {
        conn = new Mongo();
        db = conn.getDB("db-name");
        db.auth("user-name","password");
        return db;
    }
}
在当前目录下建立文件test03.js,内容如下:
复制代码 代码如下:
load("lib/base_operation.js");
BO = new BaseOperation();
db = BO.getDB();

var cursor = db.mr_result.find();

while(cursor.hasNext()) {
    r = cursor.next();
    print(r["_id"] + "\t" + r["value"]);
}
运行test03.js的效果和test02.js相同。

上一篇:MongoDB常用命令小结
下一篇:MongoDB整库备份与还原以及单个collection备份、恢复方法
一句话新闻
一文看懂荣耀MagicBook Pro 16
荣耀猎人回归!七大亮点看懂不只是轻薄本,更是游戏本的MagicBook Pro 16.
人们对于笔记本电脑有一个固有印象:要么轻薄但性能一般,要么性能强劲但笨重臃肿。然而,今年荣耀新推出的MagicBook Pro 16刷新了人们的认知——发布会上,荣耀宣布猎人游戏本正式回归,称其继承了荣耀 HUNTER 基因,并自信地为其打出“轻薄本,更是游戏本”的口号。
众所周知,寻求轻薄本的用户普遍更看重便携性、外观造型、静谧性和打字办公等用机体验,而寻求游戏本的用户则普遍更看重硬件配置、性能释放等硬核指标。把两个看似难以相干的产品融合到一起,我们不禁对它产生了强烈的好奇:作为代表荣耀猎人游戏本的跨界新物种,它究竟做了哪些平衡以兼顾不同人群的各类需求呢?
友情链接:杰晶网络 DDR爱好者之家 南强小屋 黑松山资源网 白云城资源网 站点导航 SiteMap