zoukankan      html  css  js  c++  java
  • MongoDB查询语法

    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

  • 相关阅读:
    PuTTY 私钥'putty/sshdss.c' 多个信息泄露漏洞
    PuTTY DSA签名远程缓冲区溢出漏洞(CVE-2013-4207)
    Apache CloudStack多个跨站脚本漏洞(CVE-2013-2136)
    phpMyAdmin 完整路径泄露漏洞3
    程序员必知的 七 种软件架构模式!
    【扩展知识】数据结构之动态内存管理机制!
    新年新气象,拼多多退出春晚红包合作,由抖音补位!
    【新年第一个程序】三子棋小游戏(C语言数组实现)
    编程开发中你必须了解的内存知识!从分配到使用直至出现Bug!
    C语言小写转大写,小写字母转换成大写字母!
  • 原文地址:https://www.cnblogs.com/think_fish/p/3422307.html
Copyright © 2011-2022 走看看