mongodb查询

高级查询

find()

1 查询所有记录

     db.users.find()

2 查询name为apple的记录

     db.users.find({“name”:”apple”})

3 查询country为china,gender为1的记录

     db.users.find({“country”:”china”,” gender”:1})

限制结果集

对应到标准sql, 之前是select * from, 现在需要的是select name from …

1 查询name为apple,并且结果只显示name

     db.users.find({“name”:”apple”}, {“name”:true})

注:后面这个参数{name:true}代表只显示name,如果有一个设置true,那么其他未设置的都是默认false,但是_id字段是默认true的,如果不想显示_id,可以这么写:

db.users.find({“name”:”apple”}, {“name”:true,” _id”:false})


2 查询所有记录,并且结果只显示name和country

     db.users.find(null, {“name”:true, “country”:true, “_id”:false})

findOne()

顾名思义,只显示查询到的第一条记录,类似于select top 1 …

db.users.findOne({“gender”:0})

limit()

类似于sqlserver中的top

     db.users.find({“gender”:0}).limit(2);

条件操作符 <, <=, >, >=, !=

$lt 小于 (less than)

$lte 小于等于 (less than equals)

$gt 大于 (greater than)

$gte 大于等于 (greater than equals)

$ne 不等于 (not equals)

查出age大于30的记录

db.users.find({“age”:{$gt:30}})

查出age>=30 且 <=40的记录

     db.users.find({“age”:{$gt:30, $lt:40}})

$exists

用于判断字段是否存在,比如我们向users集合里面添加一条记录,只有name属性

db.users.insert({name:”testExists”})

现在我们查出不存在age字段的记录

db.users.find({“age”:{$exists:false}})

查出有age字段但没有gender字段的记录

db.users.find({“age”:{$exists:true},” gender”:{$exists:false}})

null值的处理

需要注意的null与exists的区别

null指的是字段为空或者字段不存在

exists指的是字段是否存在

比较下面两条记录

{“name”:null,” age”:44}

{“age”:45}

如果使用null查询 db.xxx.find({name:null}) 则会查出上面两条记录

但是我们只想找出存在name字段并且其为空的记录,可以这么查询

db.xxx.find({“name”:{$exists:true, $in:[null]}});

$mod

取模,比如我们查询年龄取模10等于1的记录,应该是年龄为1,11,21,…

db.users.find({“age”:{$mod:[10,1]}})

$in & $nin

这个类似于标准sql的in与not in

查询age为23或者24的记录

db.users.find({“age”:{$in:[23, 24]}})

查询age不为23或者24的记录

db.users.find({“age”:{$nin:[23, 24]}})

$not

可以用在任何其他条件之上

db.users.find({$not:{“age”:{$gt:25}}})

$or

查询年龄为32或者name为zhangsan的记录

db.users.find({$or:[{“name”:”zhangsan”}, {“age”:32}]})

数组操作

假设我们有下面两个document

${“name”:”zhangsan”,” booksNumber”:[101, 102, 103]}

${“name”:”lisi”, “booksNumber”:[101, 103]}

$all

db.users.find({“booksNumber”:{$all:[101, 102]}});

那么就能查出第一条记录,它需要满足里面所有的条件

$size

我们需要查询只有booksNumber里面只有两个的记录

db.users.find({“booksNumber”:{$size:2}})

count()

查询总记录数

db.users.find().count()

注:如果我们使用了limit

db.users.find().limit(3).count() 这里是取前三条记录,但是调用count()后还是显示总记录数,如果我们需要返回被限制后的记录数

db.users.find().limit(3).count(true)即可

sort()

这也是个顾名思义的操作,排序: 1 代表升序 -1 代表降序

按名字进行升序排序

db.users.find().sort({name:1})

先按名字升序,再按年龄降序

db.users.find().sort({name:1, age:-1})

distinct()

查询年龄小于等于50所有的name并去除重复

db.users.distinct(“name”, {“age”:{$lte:50}})

skip()

这一特性通常用于分页

跳过三条记录并取之后的三条记录

db.users.find().skip(3).limit(3)

查询内嵌文档

比如要查询这么一条记录:

{ “books”:{“bookid”:100, “bookname”:”english”} }

db.users.find({“books.bookid”:100});

使用正则表达式

使用正则表达式也是mongodb非常强大的特性

比如我们使用正则表达式对name进行过滤

db.users.find({“name”:/^[fc]{1}/})

$where

可以使用javascript代码进行查询,这使得查询几乎能做任何事情

db.users.find({$where:function() {

     //this指遍历到的当前的document

     //根据return true or false来判断此document是否满足find的条件

     if(this.name == “zhangsan”) {

               return true;

     }

     for(var prop in this) {

               if(this[prop] == “123”) {

                        return true;

               }

}

return false;

}});

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容