码迷,mamicode.com
首页 > 数据库 > 详细

mongodb 表达式

时间:2018-03-10 21:59:09      阅读:265      评论:0      收藏:0      [点我收藏+]

标签:字段   教程   gpo   pre   $set   正则   code   mongo   his   

一、查询表达式

 

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()

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

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

文章来至:http://www.codexueyuan.com/learn/learn-detail192-mongodbbiaodshi

mongodb 表达式

标签:字段   教程   gpo   pre   $set   正则   code   mongo   his   

原文地址:https://www.cnblogs.com/codexueyuan/p/8541881.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!