用了大小写区别的正则。
(ma|to)*意味我们匹配ma或者to开始的字符串。
如果你不熟悉”*“,它意味着匹配任何字符。同样,对于姓来说,我们也使用类似的正则。
还不是很清楚吗?我们尝试另外一个查询,这里我们查询所有名字为james或者jame并且是美国女性演员的数据。如下:
db.gbin1.find( { "first" : /(jam e*)*/i, "gender" : "f", "occupation" : "actor", "nationality" : "american" } );
以上的正则表达式匹配:james,jamee,jamie等等。问好只匹配一个字符,a-z,A-Z,0-9。和前面一样,"*"匹配所有。
输出:
{ "_id" : ObjectId("4f2f473bc9031ac66270a27f"), "age" : 22, "dob" : "22/11/1958", "first" : "jamie lee", "gender" : "f", "hair_colour" : "brown", "last" : "curtis", "nationality" : "american", "occupation" : "actor" }
MapReduce
MapReduce是数据分析的重要角色。如果你没有听说过,简单说,MapReduce是拆分一个数据集合并且非配到一个电脑集群中来帮助缩短判断一个集合数据内容的方式和流程。
包括俩个部分:Map和Reduce。 实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(化简)函数,用来保证所有映射的键值对中的每一个共享相同的键组。
如果你想了解更多,请查看: Wikipedia
MapReduce的例子:
让我们看看一个简单的例子。我们将分析我们的数据集,找到所有女性的数据个数。事实上,这是个很简单的例子,但是帮助你理解Mapreduce如何工作的。
Map函数
var map = function() { emit( { gender: this.gender }, { count: 1 } ); }
输出:
{ 'f' : 1 }
Reduce函数
现在我们将他们组合使用,通过调用mapreduce函数。我们通过调用map和reduce函数来传递我们创建的map和reduce变量,指定数据结果保存的集合名称,这里是"gender",如下:
var res = db.gbin1.mapReduce( map, reduce, { out : 'gender' } );
输出内容
当map-reduce完毕,我们可以访问它。如下:
db.gender.find(); { "_id" : { "gender" : "f" }, "value" : { "count" : 2 } }
当然,这里有其它的参数可以传递到mapReduce中来自定义
- sort - 排序输出内容
- limit - 限制返回的结果数
- out - 保存结果的集合名称
- finalise - 指定一个函数在reduction过程结束后运行
- scope - 指定在map, reduce和finalise函数中使用的变量
- jsMode - 避免一个中间步骤(在map和reduce之间)来恢复JSON数据格式
- verbose - 详细的执行过程
以上是一个基本高级mongdb的使用指南。希望能够帮助大家快速了解这个伟大的工具
摘自 http://www.gbin1.com