mongoDb是非关系型数据库,用习惯了mssql,mysql等数据库的需要转换一下思维

mongoDb存的是与js的json结构一样的文档,表中的每一条记录都可以结构不同

1,大于,小于,大于等于,小于等于

$gt 大于   >

$lt 小于    <

$gte 大于或等于  >=

$lte  小于等于     <=

示例

db.collection.find({age:{$gt:18}});  //年龄大于18岁,不包含18岁

SQL:SELECT * FROM Collection WHERE age>18

db.collection.find({age:{$lt:25}});  //年龄小于25岁,不包含25岁

SQL:SELECT * FROM Collection WHERE age<25

db.collection.find({age:{$gte:18}});//年龄大于等于18岁的,包含18岁

SQL:SELECT * FROM Collection WHERE age >=18

db.collection.find({age:{$lte:25}});//年龄小于等于25岁的,包含25岁

SQL:SELECT * FROM Collection WHERE age<=25

也可以将两个条件合并,如下

db.collection.find({age:{$gt:18,$lt:25}}) ;//18<age<25;

2,不等于

$ne 不等于 noe equals

db.collection.find({age:{$ne:18}})  ;//年龄不等于18

3,in,not in

$in,$nin


语法

db.collection.find({field:{$in:array}});

db.collection.find({field:{$nin:array}});

示例:

db.collection.find({id:{$in:[1,2,3,4]}})

db.collection.find({id:{$nin:[1,2,3,4]}});

4,$exists 验证一个元素是否存在

这个语法有点绕

db.collection.find({title:{$exists:true}});  //如果记录中有包含title属性的全部返回

db.collection.find({title:{$exists:false}}); //如果记录中有包含title属性的全部不返回,不包含title属性的全部返回

5,正则表达式

mongo支持正则表达式,如:

db.customers.find( { name : /acme.*corp/i } ); // 后面的i的意思是区分大小写

支持正则表达式查询让mongDb具有相当强大的查询功能,不过同时需要开发者比较了解正则表达式

6  查询数据内的值

下面的查询是查询colors内red的记录,如果colors元素是一个数据,数据库将遍历这个数组的元素来查询。db.things.find( { colors : "red" } );

7 $elemMatch

如果对象有一个元素是数组,那么$elemMatch可以匹配内数组内的元素:

> t.find( { x : { $elemMatch : { a : 1, b : { $gt : 1 } } } } ) 
{ "_id" : ObjectId("4b5783300334000000000aa9"), 
"x" : [ { "a" : 1, "b" : 3 }, 7, { "b" : 99 }, { "a" : 11 } ]
}$elemMatch : { a : 1, b : { $gt : 1 } } 所有的条件都要匹配上才行。

注意,上面的语句和下面是不一样的。

> t.find( { "x.a" : 1, "x.b" : { $gt : 1 } } )
$elemMatch是匹配{ "a" : 1, "b" : 3 },而后面一句是匹配{ "b" : 99 }, { "a" : 11 }

8  查询嵌入对象的值

db.postings.find( { "author.name" : "joe" } );

注意用法是author.name,用一个点就行了。更详细的可以看这个链接: dot notation

举个例子:

> db.blog.save({ title : "My First Post", author: {name : "Jane", id : 1}})

如果我们要查询 authors name 是Jane的, 我们可以这样:

> db.blog.findOne({"author.name" : "Jane"})

如果不用点,那就需要用下面这句才能匹配:

db.blog.findOne({"author" : {"name" : "Jane", "id" : 1}})

下面这句:

db.blog.findOne({"author" : {"name" : "Jane"}})

是不能匹配的,因为mongodb对于子对象,他是精确匹配。

9 元操作符 $not 取反

如:

db.customers.find( { name : { $not : /acme.*corp/i } } );db.things.find( { a : { $not : { $mod : [ 10 , 1 ] } } } );

以上是常用的查询语法,下一篇将介绍复合查询

最好的文档还是官方文档,英文好的可以自己看看

http://www.mongodb.org/display/DOCS/OR+operations+in+query+expressions

MongoDB查询语法的更多相关文章

  1. MongoDB 查询语法

    转载 http://blog.163.com/lgh_2002/blog/static/440175262012052116455/ 详见官方的手册:http://www.mongodb.org/di ...

  2. MongoDB学习笔记(二、MongoDB查询)

    目录: MongoDB数据类型 MongoDB新增语法 MongoDB查询语法 MongoDB查询选择器 MongoDB关联查询 MongoDB数据类型: MongoDB新增语法: 语法:db.col ...

  3. mongodb查询文档

    说到查询,我们一般就想起了关系型数据库的查询了,比如:order by(排序).limit(分页).范围查询(大于某个值,小于某个值..,in查询,on查询,like查询等待很多),同样mongodb ...

  4. Mongodb查询的用法,备注防止忘记

    最近在用这个东西,为防止忘记,记下来. 集合简单查询方法 mongodb语法:db.collection.find()  //collection就是集合的名称,这个可以自己进行创建. 对比sql语句 ...

  5. 【mongodb系统学习之十】mongodb查询(一)

    十.mongodb查询:find ;查询时条件中不能引用文档中其他键的值: 1).查询数据库全部数据:语法db.collectionName.find();默认只显示前20条,如图: 2).按条件查询 ...

  6. MongoDb进阶实践之三 MongoDB查询命令详述

    一.引言           上一篇文章我们已经介绍了MongoDB数据库的最基本操作,包括数据库的创建.使用和删除数据库,文档的操作也涉及到了文档的创建.删除.更新和查询,当然也包括集合的创建.重命 ...

  7. MongoDb进阶实践之六 MongoDB查询命令详述(补充)

    一.引言         上一篇文章我们已经介绍了MongoDB数据库的查询操作,但是并没有介绍全,随着自己的学习的深入,对查询又有了新的东西,决定补充进来.如果大家想看上一篇有关MongoDB查询的 ...

  8. MongoDB 查询文档

    语法 MongoDB 查询数据的语法格式如下: >db.COLLECTION_NAME.find() find() 方法以非结构化的方式来显示所有文档. 如果你需要以易读的方式来读取数据,可以使 ...

  9. MongoDB查询修改操作语句命令大全

    MongoDB查询更新操作语句命令大全 查询操作 1.条件操作符 <, <=, >, >= 这个操作符就不用多解释了,最常用也是最简单的db.collection.find({ ...

随机推荐

  1. Java SE 第二十四讲----static与final使用陷阱关键字

    1.对于final类型成员变量,一般来说有两种赋值方式: a)在声明final类型的成员变量时就附上初值 package com.cl.staticandfinal; public class Fin ...

  2. SQL(Oracle)

    http://blog.csdn.net/winter13292/article/details/7011377 SQL 对大小写不敏感!  在 SQL 中增加 HAVING 子句原因是,WHERE ...

  3. DNS拦截的处理

    在用webSocket来实现长连接时,我们的链接对象使用了域名.但是再某些省份的网络下,发生了DNS拦截.踹改.导致使用某个域名链接,发生连接不上的现象.[解决方案] 在多次尝试原有域名不能使用的情况 ...

  4. U-boot 之TFTP服务器配置

    一.PC端配置1.关闭防火墙  [root@gliethttp root]# /etc/init.d/iptables stop2.使用setup启动tftp  [root@gliethttp roo ...

  5. MFC编译程序,缺少MFC动态链接库的解决

    MFC编译程序,缺少MFC动态链接库的解决 问题:VS2010 c++编写的程序在别人的机子运行不了,缺少mfc100u.dll xxx100d.dll等的解决方法 解决方法: 1.将这些dll打包, ...

  6. android 自定义组合控件 顶部导航栏

    在软件开发过程中,经常见到,就是APP 的标题栏样式几乎都是一样的,只是文字不同而已,两边图标不同.为了减少重复代码,提高效率, 方便大家使用,我们把标题栏通过组合的方式定义成一个控件. 例下图: 点 ...

  7. 哪项技术可以用在WEB开发中实现会话跟踪实现?

    HTTP是“无状态”协议:客户程序每次读取 Web 页面,都打开到 Web 服务器的单独的连接,并且,服务器也不自动维护客户的上下文信息.即使那些支持持续性 HTTP 连接的服务器,尽管多个客户请求连 ...

  8. Android7.0 Phone应用源码分析(一) phone拨号流程分析

    1.1 dialer拨号 拨号盘点击拨号DialpadFragment的onClick方法会被调用 public void onClick(View view) { int resId = view. ...

  9. PMP-产品范围与项目范围区别

    如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 1.产品范围--某项产品.服务或成果所具有的特性和功能. 2.项目范围--为交付具有 ...

  10. vb 随机获取6个1-33的数

    Private Sub random(ByVal num As Integer, ByVal min As Integer, ByVal max As Integer) Dim i As Intege ...