当前位置: 首页>前端>正文

mongodb正则数字匹配 mongodb 正则表达式

一、查询表达式

 

1: 最简单的查询表达式

{filed:value} ,是指查询field列的值为value的文档

 

2: $ne --- != 查询表达式



{field:{$nq:value}}



作用--查filed列的值 不等于 value 的文档

 

3: $nin --> not in

 

4: $all



语法: {field:{$all:[v1,v2..]}}



是指取出 field列是一个数组,且至少包含 v1,v2值

 

5: $exists 

语法: {field:{$exists:1}}

作用: 查询出含有field字段的文档

 

6: $nor,



{$nor,[条件1,条件2]}



是指  所有条件都不满足的文档为真返回

 

7:用正则表达式查询 以”诺基亚”开头的商品



例:db.goods.find({goods_name:/诺基亚.*/},{goods_name:1});



 

8: 用$where表达式来查询



例: db.goods.find({$where:'this.cat_id != 3 && this.cat_id != 11'});



 

注意: 用$where查询时, mongodb是把bson结构的二进制数据转换为json结构的对象,

然后比较对象的属性是否满足表达式.

 

速度较慢

 

Update时可用的操作符



例: ->db.user.insert({name:'lisi',age:12,sex:'male',height:123,area:'haidian'}); ->db.user.update({name:'lisi'},{$set:{area:'chaoyang'},$unset:{height:1},$inc:{age:1},$rename:{sex:'gender'}}); > db.user.find(); { "_id" : ObjectId("51fc01c4f5de93e1f2856e33"), "age" : 13, "area" : "chaoyang", "gender" : "male", "name" : "lisi" }


 

$setOnInsert ->相当于mysql中的列的默认值

 

 

二、游标操作   cursor

 

游标是什么\?

通俗的说,游标不是查询结果,而是查询的返回资源,或者接口.

通过这个接口,你可以逐条读取.

就像php中的fopen打开文件,得到一个资源一样, 通过资源,可以一行一行的读文件.

 

 

声明游标:

var cursor =  db.collectioName.find(query,projection);

Cursor.hasNext() ,判断游标是否已经取到尽头

Cursor. Next() , 取出游标的下1个单元

 

用while来循环游标



> var mycursor = db.bar.find({_id:{$lte:5}}) > while(mycursor.hasNext()) { ... printjson(mycursor.next()); ... }



 

 

例:

// 声明游标

var cursor = db.goods.find();

// 循环游标

for(var doc=true;cursor.hasNext();) { printjson(cursor.next());}

 

也可以简写:



for(var  cursor=db.goods.find(), doc=true;cursor.hasNext();) { printjson(cursor.next());}



 

 

游标还有一个迭代函数,允许我们自定义回调函数来逐个处理每个单元.

cursor.forEach(回调函数);

例:

> var gettitle = function(obj) {print(obj.goods_name)}

> var cursor = db.goods.find();

> cursor.forEach(gettitle);

 

 

游标在分页中的应用

比如查到10000行,跳过100页,取10行.

一般地,我们假设每页N行, 当前是page页

就需要跳过前 (page-1)*N 行, 再取N行, 在mysql中, limit offset,N来实现

在mongo中,用skip(), limit()函数来实现的

如 var mycursor = db.bar.find().skip(9995);

则是查询结果中,跳过前9995行

 

查询第901页,每页10条

则是 var mytcursor = db.bar.find().skip(9000).limit(10);

 

 

通过cursor一次性得到所有数据, 并返回数组.

例:

>var cursor = db.goods.find();

> printjson(cursor.toArray());  //看到所有行

> printjson(cursor.toArray()[2]);  //看到第2行

 

注意: 不要随意使用toArray()

原因: 会把所有的行立即以对象形式组织在内存里.

可以在取出少数几行时,用此功能.

 


https://www.xamrdz.com/web/2yd1961622.html

相关文章: