博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mongodb 表达式
阅读量:5934 次
发布时间:2019-06-19

本文共 2242 字,大约阅读时间需要 7 分钟。

一、查询表达式

 

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

 

游标是什么\?

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

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

就像中的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行, 在中, 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

转载于:https://www.cnblogs.com/codexueyuan/p/8541881.html

你可能感兴趣的文章
MySQL存储引擎--MyISAM与InnoDB区别
查看>>
Android音频开发(4):如何存储和解析wav文件
查看>>
Tomcat乱码解决方法
查看>>
图的顶点间最小路径问题
查看>>
JDK8环境变配置量
查看>>
20个非常有用的Java程序片段(一)
查看>>
使用jQuery.form.js/springmvc框架实现文件上传功能
查看>>
Java调用python脚本
查看>>
VS2017安装ReSharper
查看>>
copy 的实现原理与深浅拷贝
查看>>
Redis+Tomcat+Nginx实现session共享
查看>>
[转]
查看>>
Eclipse 工作集 Task 搜索
查看>>
Install OpenStack Kilo
查看>>
php面向对象详解4
查看>>
vi或者vim文件加密和乱码的处理
查看>>
RXJava异步代码
查看>>
AD维护管理工具详解(二)netdiag
查看>>
Linux基础命令:grep 必知必会
查看>>
我的友情链接
查看>>