mongoDB 逻辑运算符

在mongoDB中,逻辑运算也是较为常用的运算,这些逻辑运算通常包含与或非,取反,存在等等。本文描述mongoDB几类常用的逻辑运算符同时给出演示示例,供大家参考。

一、mongoDB中的几种逻辑运算符

    $or       逻辑或
    $and      逻辑与
    $not      逻辑非
    $nor      逻辑or的取反
    $exists   存在逻辑
    $type     查询键的数据类型

二、演示逻辑运算

演示集合persons中用到的文档数据请参考:mongoDB 比较运算符

1. $or

    Syntax: { $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] } 

    db.persons.find( {$or : [{age:25},{email:"robinson.cheng@qq.com"}]})  //不同的键基于$or操作符的查询
    db.persons.find( {$or:[{age:25},{age:{$eq:27}}]})                     //相同的键基于$or操作符的查询
    db.persons.find( {age: {$in : [25,27]}})     //对于相同键的$or查询建议使用$in替换,如本查询替换上面的查询   

2. $and

    Syntax: { $and: [ { <expression1> }, { <expression2> } , ... , { <expressionN> } ] }

    db.persons.find( {$and: [{age:{$gt:25}},{age:{$lt:30}}]})
    db.persons.find( {$and: [{age:{$gt:25}},{"score.c":75}]})        //嵌套文档作为$and查询条件        
    db.persons.find( {$and: [{age:{$gt:25}},{books:"MONGODB"}]})     //数组作为$and查询条件 

3. $not

    Syntax: { field: { $not: { <operator-expression> } } }     

db.persons.find( { age: {$not : { $gt : 25 } } } )  //查询年龄不大于25对文档       

4. $nor

    Syntax: { $nor: [ { <expression1> }, { <expression2> }, ...  { <expressionN> } ] }         

db.persons.find( {$nor : [ {age: { $gt : 25 } } ] } )                        //单个条件的$nor    
db.persons.find( {$nor : [ {age: { $gt : 25 } },{ books : "MONGODB" } ] } )  //查找age不大于25,并且书籍不包含MONGODB的文档
db.persons.find( {$or : [ {age: { $gt : 25 } },{ books : "MONGODB" } ] } )   //该查询与上正好相反,为上一个查询的补集

5. $exists

    Syntax: { field: { $exists: <boolean> } }

    //moongoDB中的exists通常是用于判断是否有这个键,而不是SQL中的某个列上存在某个值

    db.users.insert({ename:"robin",age:25})            //创建一个新的集合
    db.users.insert({ename:"henry",age:25,add:"SZ"})   //添加一个列

    db.users.find()                                    //查询集合上的记录
    { "_id" : ObjectId("57d4e95d280c7afecd0250c9"), "ename" : "robin", "age" : 25 }
    { "_id" : ObjectId("57d4e96f280c7afecd0250ca"), "ename" : "henry", "age" : 25, "add" : "SZ" }

    db.users.find( { add : { $exists : true } } )      //查询add列存在的记录
    { "_id" : ObjectId("57d4e96f280c7afecd0250ca"), "ename" : "henry", "age" : 25, "add" : "SZ" }

    db.users.find( { add : { $exists : false } } )     //查询add列不存在的记录
    { "_id" : ObjectId("57d4e95d280c7afecd0250c9"), "ename" : "robin", "age" : 25 } 

    db.users.find({$and :[ { add:{ $exists:false } },{ age : 25 } ] } )  //复合条件
    { "_id" : ObjectId("57d4e95d280c7afecd0250c9"), "ename" : "robin", "age" : 25 }   

    db.users.insert({author:"Leshami",blog:"http://blog.csdn.net/leshami"})           

6. $type //基于类型的查询

    { field: { $type: <BSON type number> | <String alias> } }
    //类似于C#/Java中的typeof

    db.users.insert({ename:"fred",age:undefined,add:"SZ"})   //age列为undefined
WriteResult({ "nInserted" : 1 })

    db.users.find({age:{$type:6}})
    { "_id" : ObjectId("57d4ed86280c7afecd0250cb"), "ename" : "fred", "age" : undefined, "add" : "SZ" }

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏架构师之旅

Oracle的常见问题汇总(2)——​ORACLE IN与EXISTS语句的区别

1、第一种解释方法: select * from A where id in(select id from B) 以上查询使用了in语句,in()只执行一...

1968
来自专栏微信终端开发团队的专栏

微信移动端数据库组件 WCDB 系列:WINQ原理篇(三)

高效、完整、易用是WCDB的基本原则。前几篇文章分享了WCDB的基本用法和修复工具,接下来将更深入地聊聊WCDB在易用性上的思考和实践。

8180
来自专栏ml

mysql知识初篇(一)

mysql介绍 (1) mysql数据库是瑞典AB开发。 (2) mysql--> sun --> oracle。 (3) mysql数据库的...

3557
来自专栏Kevin-ZhangCG

Oracle学习笔记一

Oracle数据库是数据的物理存储。这就包括(数据文件ORA或者DBF、控制文件、联机日志、参数文件)。其实 Oracle数据库的概念和其它数据库不一样,这里...

1082
来自专栏信安之路

SQL注入的常规思路及奇葩技巧

最近在看《SQL注入攻击与防御》这本书,看了之后感觉自己之前的视野和格局还是太小了些。SQLi的应用特别广泛,多种web数据库不说,移动安卓端也存在通用的SQL...

1300
来自专栏数据和云

90%的面试者都不知道这道题的答案

小编寄语 亲爱的DBA同胞们,你们是否记得在你找工作时,印象最深刻的面试题呢?那些看似简单的题目,实则蕴藏很大的玄机。今天我们通过一道经典的 ORacle DB...

2856
来自专栏逸鹏说道

SQL Server 索引和表体系结构(聚集索引+非聚集索引)

聚集索引 概述 关于索引和表体系结构的概念一直都是讨论比较多的话题,其中表的各种存储形式是讨论的重点,在各个网站上面也有很多关于这方面写的不错的文章,我写这...

3369
来自专栏杨建荣的学习笔记

通过oracle类比MySQL中的字节字符问题(r4笔记第44天)

在几个月前写过一篇博文 MySQL数据类型 http://blog.itpub.net/23718752/viewspace-1371434/ 当时写完以后有...

3357
来自专栏Java后端生活

mysql 时间戳函数FROM_UNIXTIME和UNIX_TIMESTAMP函数的使用说明

2526
来自专栏栗霖积跬步之旅

第八章:用通配符进行过滤

表名:products  字段:product_id、product_name、product_price、vend_id(供应商) 1.LIKE操作符: 通配...

1935

扫码关注云+社区

领取腾讯云代金券