如何将map-reduce功能添加到mongodb以供重用?

时间:2018-01-02 19:05:41

标签: mongodb

我想知道是否有办法可以保存mongodb上使用的JavaScript函数。这样,您可以在需要时重用这些功能。

1 个答案:

答案 0 :(得分:0)

是的,现在有一种方法可以在服务器上存储JavaScript函数以供重用。您只需将它们存储在每个数据库调用system.js的特殊集合中。这样做看起来像这样:

  

db.system.js.save({        _id:" myAddFunction" ,        value:function(x,y){return x + y; }});

确保首先在mongo shell中选择要使用use <database>命令保存函数的数据库。

这是我添加到system.js的函数,它检查集合属性是否唯一:

db.system.js.save({
      _id : "allDifferent" ,
      value : function (collection,field) {
                 var m = function() { emit(this.field, 1); }
                 var r = function(key, emits) {
                               var n = 0; emits.forEach(function(v) { n += v; }); return n;
                         }
                 var result = db.collection.mapReduce(m, r, { out: "namecounts" });
                 var allDifferent= (db.namecounts.count( { value: { $gt: 1 } } ) == 0)
                 db.namecounts.drop();
                 return allDifferent;
              }
      });

在mongo shell中,您应该使用db.loadServerScripts()加载当前数据库的system.js集合中保存的所有脚本。

加载后,您可以直接在shell中调用函数,如下例所示:

  

allDifferent(sample_collection,name)

您还可以列出使用

保存的功能
  

db.system.js.distinct(&#34; _id&#34);