mongoDB 比较运算符

比较运算符是我们学习任何语言或系统中最为常见的运算符之一。mongoDB的比较运算符,跟Linux的差不多,只不过每一个比较运算符前面会带有符号,他们分别是$eq、$gt、$gte、$lt、$lte、$ne、$in、符号,他们分别是\$eq、\$gt、\$gte、\$lt、\$lte、\$ne、\$in、nin等,下面将对这几个运算符进行描述。

一、比较运算符

  $eq    =               "="
  $gt   (greater than )  >
  $gte                   >=  (equal)
  $lt   (less than)      <
  $lte                   <=  (equal)
  $ne   (not equal)      !=
  $in                    in
  $nin  (not in)         !in

    重点:所有的比较运算符都是出现在键与值得中间,示例如下
            { <field_name>: { $operator: <value> } }
            { <ename>: { $eq: "robin" } }
            { <qty>: { $gt: 20 } }

二、比较运算符示例

1. $eq

     { <field>: {\$eq: <value> } }
        $eq表达式与{ field: <value> }等价
        <1> 支持简单匹配
        <2> 支持文档匹配(document,逐字段比较)
        <3> 支持数组匹配(array,有顺序要求)

    //单值匹配
    db.persons.find( { age: { $eq: 25 } } )
    db.persons.find( { age: 25 } )        //与上一条语句等价         

    //多值匹配
    db.persons.find( { age: { $eq: 25 } ,country: "USA"} )   
    db.persons.find({$and:[{age:{$eq:25}},{country:{$eq:"USA"}}]}) //也可以使用$and运算符

    //嵌套文档匹配
    db.persons.find( { score: {"c" : 75, "m" : 63,"e" : 97}} )

    db.persons.find({"score.c":{$eq:89}}) //可以使用基于.成员的方式进行匹配
    db.persons.find({"score.c":89})          //等价的查询方式

    //数组匹配
    db.persons.find({"books":{$eq:"PHP"}})  //forech查找,不包含A的数组不会被返回
    db.persons.find({"books":{$in:["PHP"]}})  //也可以使用$in方式替代
    db.persons.find({"books":"PHP"})        //等价方式

2. $gt/$gte

    {field: {$gt: value} }

    db.persons.find( { age: { $gt: 20 } } )                   //大于运算符
    db.persons.find( { age: { $gte: 25 } } ).sort({"age":-1}) //大于等于运算符及倒序排列

3. $lt/$lte

    Syntax: {field: {$lt: value} }

    db.persons.find( { age: { $lt: 25 } } )
    db.persons.find( { age: { $lte: 25 } } ).sort({"age":-1})
    db.persons.find( { age: { $lte: 25 } } )

4. $ne

    Syntax: {field: {$ne: value} }

    db.persons.find( { age: { $ne: 20 } } ).sort({"age":-1})

5. $in

    Syntax: { field: { $in: [<value1>, <value2>, ... <valueN> ] } }

    db.persons.find( { age: { $in: [ 25, 27 ] } } )  //多值匹配
    db.persons.find( { books: { $in: [ /^JA/, /^PH/ ] } } ) //正则表达式匹配,查询以JA以及PH开头的
    //Author : Leshami
    //Blog   : http://blog.csdn.net/leshami

6. $nin

    Syntax: { field: { $nin: [ <value1>, <value2> ... <valueN> ]} }

    db.persons.find( { age: { $nin: [ 25, 27 ] } } ).sort({"name":-1});
    db.persons.update({ books: { $nin:["JAVA","PHP"]} },{$set: { age:100 }}) //基于$nin的文档更新

三、演示用到的示例文档

var persons = [{
    name:"robinson.cheng",
    age:25,
    email:"robinson.cheng@qq.com",
    score:{c:89,m:96,e:87},
    country:"USA",
    books:["JS","C++","EXTJS","MONGODB"]
},
{
    name:"tom.tong",
    age:25,
    email:"tom.tong@qq.com",
    score:{c:75,m:66,e:97},
    country:"USA",
    books:["PHP","JAVA","EXTJS","C++"]
},
{
    name:"jerry.liu",
    age:26,
    email:"jerry.liu@qq.com",
    score:{c:75,m:63,e:97},
    country:"USA",
    books:["JS","JAVA","C#","MONGODB"]
},
{
    name:"henry.ye",
    age:27,
    email:"henry.ye@qq.com",
    score:{c:89,m:86,e:67},
    country:"China",
    books:["JS","JAVA","EXTJS","MONGODB"]
},
{
    name:"lisi",
    age:26,
    email:"lisi@qq.com",
    score:{c:53,m:96,e:83},
    country:"China",
    books:["JS","C#","PHP","MONGODB"]
},
{
    name:"fred.shu",
    age:27,
    email:"fred.shu@qq.com",
    score:{c:45,m:65,e:99},
    country:"China",
    books:["JS","JAVA","C++","MONGODB"]
},
{
    name:"jason.wu",
    age:27,
    email:"jason.wu@qq.com",
    score:{c:99,m:96,e:97},
    country:"China",
    books:["JS","JAVA","EXTJS","PHP"]
},
{
    name:"david.xiao",
    age:26,
    email:"david.xiao@dbsupport.cn",
    score:{c:39,m:54,e:53},
    country:"Korea",
    books:["JS","C#","EXTJS","MONGODB"]
},
{
    name:"frank.hu",
    age:27,
    email:"frank.hu@dbsupport.cn",
    score:{c:35,m:56,e:47},
    country:"Korea",
    books:["JS","JAVA","EXTJS","MONGODB"]
},
{
    name:"joe.zhou",
    age:21,
    email:"joe.zhou@dbsupport.cn",
    score:{c:36,m:86,e:32},
    country:"Korea",
    books:["JS","JAVA","PHP","MONGODB"]
},
{
    name:"steve.tang",
    age:22,
    email:"steve.tang@dbsupport.cn",
    score:{c:45,m:63,e:77},
    country:"Korea",
    books:["JS","JAVA","C#","MONGODB"]
}]
for(var i = 0;i<persons.length;i++){
    db.persons.insert(persons[i])
}
var persons = db.persons.find({name:"robinson.cheng"})
while(persons.hasNext()){
    obj = persons.next();
        print(obj.books.length)
} 

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Python中文社区

Python如何传递运算表达式

正小歪,Python 工程师,主要负责 Web 开发和日志数据处理。博客文章《真正的 Tornado 异步非阻塞》、《使用 JWT 让你的 RESTful AP...

11810
来自专栏Spark学习技巧

Flink DataStream编程指南

Flink程序是执行分布式集合转换(例如,filtering, mapping, updating state, joining, grouping, defi...

2.1K70
来自专栏10km的专栏

java:关于json解析工具选型(JSON-java,json-lib,gson,fastjson)

没有最好的工具,只有最适合的. 最近的项目需要对java 对象和json之间的序列化和反序列化,更准确的说是java bean对象和json之间的转换,使用...

33460
来自专栏前端开发

javascript逻辑运算符“||”和“&&”

19840
来自专栏数据结构与算法

洛谷P1043 数字游戏

题目描述 丁丁最近沉迷于一个数字游戏之中。这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易。游戏是这样的,在你面前...

35450
来自专栏数说工作室

【SAS Says】基础篇:3. 描述数据

本节介绍如何利用SAS写一份数据报告,给出数据的基本信息。 从3.11开始的内容,是留给处女座的,主要说如何用proc tabulate和proc report...

370100
来自专栏青蛙要fly的专栏

项目需求讨论--可能是用InputFilter来做的最好的金额限制

看惯了可能是XXX最好的,可能是XXXX目前最好的,今天我也用下这个标题,哈哈。别喷我,当然我也就吹吹牛。有很多好的方法来实现。

17120
来自专栏编程之旅

数据结构——无权图的路径问题(C++和java实现)

好像又是接近半个月没有更新,这半个月忙着结婚的各项事情,本来预计的学习任务也拖拖拉拉,进度缓慢。吐槽一句,拍婚纱照真的是最非常非常累的一件事情,不想再有下次了。

11920
来自专栏WindCoder

网易MySQL微专业学习笔记(一)-mysql数据类型

这个系列属于个人学习网易云课堂MySQL数据库工程师微专业的相关课程过程中的笔记,本篇为其“MySQL数据库对象与应用”中的MySQL数据类型相关笔记。

9310
来自专栏Java帮帮-微信公众号-技术文章全总结

第十四天 面向对象-eclipse导jar包&amp;修饰符&amp;自定义数据类型【悟空教程】

Ctrl+滑鼠左键 或者 F3 查看所选中类的源代码,当选中一个方法查看源代码时,会出现以下显示,上边为方法声明的位置,下边为方法实现的位置。

10320

扫码关注云+社区

领取腾讯云代金券