查询文档

使用db.COLLECTION_NAME.findOne()可以查询所有满足条件的第一条数据

预发格式如下:

 db.COLLECTION_NAME.findOne(<query>, <projection>)

参数说明:

  • query :可选参数,
    指明查询条件,相当于SQL中的where语句
  • projection : 可选参数,指定了那些字段是需要返回的,若要返回所有字段则不必要指定该参数。

    prejection参数格式如下:

                { field1: <boolean>, field2: <boolean> ... }

    • 1 或者 true 代表包含该field。find()方法总是包括_id字段,即便你这里没有指定要_id字段。
    • 0或者false 代表不不包含该field。

如果希望查询满足条件的所有数据库可以使用方法db.COLLECTION_NAME.find()

语法格式如下:

 db.COLLECTION_NAME.find(<query>, <projection>)

参数说明:

  • query :可选参数,
    指明查询条件,相当于SQL中的where语句
  • projection : 可选参数,指定了那些字段是需要返回的,若要返回所有字段则不必要指定该参数。

    prejection参数格式如下:

                { field1: <boolean>, field2: <boolean> ... }

    • 1 或者 true 代表包含该field。find()方法总是包括_id字段,即便你这里没有指定要_id字段。
    • 0或者false 代表不不包含该field。

find() 方法以非结构化的方式来显示所有文档。可以使用pretty()方法格式化返回结果

语法格式如下:

    db.COLLECTION_NAME.find().pretty()

limit() 方法接受一个数值类型的参数,其值为想要显示的文档数。如果未指定 limit() 方法中的数值参数,则将显示该集合内的所有文档。

    db.COLLECTION_NAME.find().limit(NUMBER)

skip() 表示希望跳过的记录数,一般与limit()共同使用,实现分页功能,skip() 方法中的默认值为 0。

    db.COLLECTION_NAME.find().limit(number1).skip(number2)

以上语法等同于mysql中的 select * From table limit number1,number2

sort() 方法可以通过一些参数来指定要进行排序的字段,并使用 1 和 -1 来指定排序方式,其中 1 表示升序,而 -1 表示降序。

    db.COLLECTION_NAME.find().sort({KEY:1})

关系型数据库与MongoDB数据库在一些术语上的对

MongoDB操作符

范例

关系型数据库(mysql)

关系型数据库范例

$eq

{key:{$eq:value}}或{key:value}

=

where key=value

$ne

{key:{$ne:value}}

!=

where key !=value

$gt

{key:{$gt:value}}

>

where key > value

$gte

{key:{$gte:value}}

>=

where key >= value

$lt

{key:{$lt:value}}

<

where key < value

$lte

{key:{$lte:value}}

<=

where key <= value

$in

{key:{$in:[value1,value2,...]}}

in

where key in (value1,value2,...)

$nin

{key:{$nin:[value1,value2,...]}}

not in

where key not in (value1,value2,...)

$or

{ $or: [ { key1: { $lt: value1 } }, { key2: value2 } ] }

or

where key1 < value1 or key2=value2

$and

{ $and: [ { key1: { $lt: value1 } }, { key2: value2 } ] } 或 { key1: { $lt: value1 } }, { key2: value2 }}(针对内嵌的数组文档请参考$elemMatch)

and

where key1 < value1 and key2=value2

$and 与 $or组合使用

{$and:[{$or:[{key2:value2,key2:value3}]},{key1:value1}]}

 

where key1=value and (key2=value2 or key2=value3)

$not

{ key: { $not: { $gt: value } } }

!

where !(key > value)

$nor

{ $nor: [ { key1: value1 }, { key2: value2 } ]

 

where !(key1=value1 or key2=value2)

skip()和limit()

db.COLLECTION_NAME.find().limit(number1).skip(number2)

limit

select * From table limit number1,number2

sort()

db.COLLECTION_NAME.find().sort({KEY:1})

order by desc

select * from table order by key 升序 select * from table order by key desc 降序

MongoDB数组操作符

操作符

示例

备注

$all

{key1:{$all:[value1,value2,...]}}

针对集合中类型为array的字段,与 $in 类似,但是必须要满足$all预发 [ ] 中的所有元素。

$elemMatch

{ key1: { $elemMatch: { $gt: 15, $lt: 20 } } } 表示key1大于15且小于20

针对集合中类型为array的字段,这个操作符的作用是对数组中的元素进行多条件匹配,只要数组中至少一个元素满足指定的条件,那么就表示匹配成功,也就是说,'$elemMatch'操作符指定的条件之间是"与"的关系

多条件之间 or 关系

{ key1: { $gt: 15, $lt: 20 } } 表示key1大于15或小于20的值

针对集合中类型为array的字段,只要数组中的任何一个元素满足多个查询条件中的任何一个,那么就认为这个文档被匹配上了

$size

{key1:{$size:2}}

针对集合中类型为array的字段,操作符匹配指定数组中元素个数和指定参数一致的文档,$size 操作符不接受值的范围查询,当要输出基于 fields 字段含不同个数元素的文档时,可以创建一个计数器字段,当fields新增一个元素时则计算器加1

$slcie

db.collection.find( { field: value }, { array: {$slice: count } } );

此操作符根据参数"{ field: value }" 指定键名和键值选择出文档集合,并且该文档集合中指定"array"键将返回从指定数量的元素。如果count的值大于数组中元素的数量,该查询返回数组中的所有元素的。 //选择comments的数组键值中前五个元素。 db.posts.find( {}, { comments: { $slice: 5 } } ); //选择comments的数组键值中后五个元素。 db.posts.find( {}, { comments: { $slice: -5 } } ); //选择comments的数组键值中跳过前20项之后前10项元素 db.posts.find( {}, { comments: { $slice: [ 20, 10 ] } } ); //选择comments的数组键值中倒数第20项起前10项元素 db.posts.find( {}, { comments: { $slice: [ -20, 10 ] } } );

MongoDB字段操作符

操作符

示例

备注

$exists

{ field: { $exists: true } }

就是判断一个字段是否存在,为true,选择存在该字段的文档;若值为false则选择不包含该字段的文档。

$type

{ field: { $type: <BSON type> } }

选择字段值为指定的BSON数据类型的文档.<BSON type> 也可以使用对应的类型编号,
注意:如果文档的键值是一个数组。那么$type将对数组里面的元素进行类型匹配而不是键值数组本身。
如果想检查键值的类型是否为数组类型,使用$where操作符 db.COLLECTION_NAME.find( { $where : "Array.isArray(this.fieldname)" } )

<BSON type> 类型对照表,参考官网

MongoDB其他操作符

操作符

示例

备注

$mod

{ field: { $mod: [ divisor, remainder ]} }

匹配字段值对(divisor)取模,值等于(remainder)的文档
如:db.inventory.find( { amount: { $mod: [ 4, 0 ] } } ) 等同于 db.inventory.find( { $where: "this.amount % 4 == 0" } ) 如果 amount键值为null,javascript中null进行数值转换,会返回"0"。所以该条文档匹配where操作符求模式了表达式。当文档中字段值不存在null,就可以使用where操作符求模式了表达式。当文档中字段值不存在null,就可以使用mod替代$where的表达式. 如果键值为null,可以使用求模表达式的mod操作符替代使用求模表达式的where操作符,因为后者代价昂贵。

$regex

{ : { $regex: /pattern/, $options: '<options>' } }

操作符查询中可以对字符串的执行正则匹配。 MongoDB使用Perl兼容的正则表达式(PCRE)库来匹配正则表达式. options(使用options(使用regex ) i  如果设置了这个修饰符,模式中的字母会进行大小写不敏感匹配。 m 默认情况下,PCRE 认为目标字符串是由单行字符组成的(然而实际上它可能会包含多行).如果目标字符串
中没有 "\n"字符,或者模式中没有出现"行首"/"行末"字符,设置这个修饰符不产生任何影响。 s 如果设置了这个修饰符,模式中的点号元字符匹配所有字符,包含换行符。如果没有这个修饰符,点号不匹配换行符。 x 如果设置了这个修饰符,模式中的没有经过转义的或不在字符类中的空白数据字符总会被忽略,并且位于一个未转义的字符类外部的#字符和下一个换行符之间的字符也被忽略。
这个修饰符使被编译模式中可以包含注释。
注意:这仅用于数据字符。
空白字符
还是不能在模式的特殊字符序列中出现,比如序列
。
注:JavaScript只提供了i和m选项,x和s选项必须使用$regex操作符。
如:db.inventory.find( { name: { $regex: '.4', $options: 'i' } } ); 查询name键值以"4"结尾的文档

$where

{$where:whereclause}

操作符功能强大而且灵活, 但性能较差,他可以使用任意的JavaScript作为查询的一部分,包含JavaScript表达式的字符串或者JavaScript函数。
比较文档中的两个键的值是否相等.例如查找出banana等于peach键值的文档(4种方法): //JavaScrip字符串形式 db.fruit.find( { $where: "this.banana == this.peach" } ) db.fruit.find( { $where: "obj.banana == obj.peach" } ) //JavaScript函数形式 db.fruit.find( { $where: function() { return (this.banana == this.peach) } } ) db.fruit.find( { $where: function() { return obj.banana == obj.peach; } } )

$text

{ $text: { $search: <string>, $language: <string>, $caseSensitive: <boolean>, $diacriticSensitive: <boolean> } }

针对建立了全文索引的字段,实施全文检索匹配

MongoDB学习笔记——文档操作之查询的更多相关文章

  1. MongoDB学习笔记——文档操作之增删改

    插入文档 使用db.COLLECTION_NAME.insert() 或 db.COLLECTION_NAME.save() 方法向集合中插入文档 db.users.insert( { user_id ...

  2. MongoDB学习笔记二—Shell操作

    数据类型 MongoDB在保留JSON基本键/值对特性的基础上,添加了其他一些数据类型. null null用于表示空值或者不存在的字段:{“x”:null} 布尔型 布尔类型有两个值true和fal ...

  3. MongoDB 集合与文档操作

    一.创建DB 1.查看DB >show dbs 2.创建DB >use mydb 3.查看当前DB >db 4.删除DB >use mydb >db.dropDataba ...

  4. Mongodb学习笔记五(C#操作mongodb)

    mongodb c# driver(驱动)介绍 目前基于C#的mongodb驱动有两种,分别是官方驱动(下载地址)和samus驱动(下载地址). 本次我们只演示官方驱动的使用方法. 官方驱动文档查看 ...

  5. 4. svg学习笔记-文档结构元素和样式的使用

    svg除了绘图元素之外还有一部分是专门用于文档结构的,这类元素有<g>,<use>,<defs>,<symbol>等 <g>元素 如果我们仅 ...

  6. StyleCop学习笔记-文档规则

    文档规则: .SA1600:ElementsMustBeDocumented元素必须添加注释 .SA1601: PartialElementsMustBeDocumented Partial修饰的成员 ...

  7. MongoDB内嵌文档操作

    实体定义: [BsonIgnoreExtraElements] public class Person : BaseEntity { public string FirstName { get; se ...

  8. MongoDB学习笔记~MongoVUE对数据进行查询,排序和按需显示

    回到目录 对于MongoDB这个非关系型数据库(NoSql)来说,找一个IDE工具不是很容易,还好被我找到了,它就是大名鼎鼎的MongoVUE,它可以对mongodb数据表进行增删改查,下面我主要说一 ...

  9. MongoDB 学习笔记(二) 高级查询

    1.条件运算符 2.$all 匹配所有 3.$exists 判断字段是否存在 4.NUll 值处理 5.$mod 取模处理 6.$ne 不等于 7. $in 包含,与sql用法相同 8. $nin 不 ...

随机推荐

  1. 【第三课】ANR和OOM——贪快和贪多的后果(上)

    恼人的ANR 早先年用Android的时候,就连很多知名的app也总是莫名其妙崩溃,好像手机快的时候会崩溃,手机卡的时候app会卡死.卡死的时候会弹出来一个框,询问是要结束app还是继续等待.这就是A ...

  2. flex布局浅谈和实例

    阿基米德曾说给我一个支点我可以撬动地球,而拥有flex基本可以撬动所有的布局. 1.flex布局基本介绍及效果展示 工欲善其事必先利其器,来来来,一起看下基础知识先(呵~,老掉牙,但是有用啊). ** ...

  3. 基于GTID Replication主从数据不一致操作

    基本的M-S结构   现在master与slave主机数据一致:   mysql> select * from t1; +------+ | id   | +------+ |    1 | | ...

  4. Mysql log_slave_updates 参数

    官网说明: Normally, a slave does not log to its own binary log any updates that are received from a mast ...

  5. ref与out的区别

    若要使用 ref 参数,方法定义和调用方法均必须显式使用 ref 关键字,如下面的示例所示. class RefExample { static void Method(ref int i) { // ...

  6. 重新想象 Windows 8 Store Apps (42) - 多线程之线程池: 延迟执行, 周期执行, 在线程池中找一个线程去执行指定的方法

    [源码下载] 重新想象 Windows 8 Store Apps (42) - 多线程之线程池: 延迟执行, 周期执行, 在线程池中找一个线程去执行指定的方法 作者:webabcd 介绍重新想象 Wi ...

  7. cURL和HTTPie

    http://lingxiankong.github.io/blog/2014/08/19/curl-httpie/ 前两天在网上看到一个号称比cURL更牛逼的命令行工具HTTPie,提供命令行交互方 ...

  8. strtr对用户输入的敏感词汇进行过滤

    /** * 过滤用户输入的基本数据,防止script攻击 * * @access public * @return string */ function compile_str($str) { $ar ...

  9. Java的集合框架

    01.为什么要使用集合框架? 解析:如果并不知道程序运行时会需要多少对象,或者需要更复杂方式存储对象,那么可以使用Java集合框架. 如果启用集合的删除方法,那么集合中所有元素的索引会自动维护. 集合 ...

  10. Python参数组合

    参数定义的顺序必须是:①必选参数.②默认参数.③可选参数.④命名关键字参数.⑤关键字参数 #a,b为必选参数:c为默认参数:args为可变参数:kw为关键字参数 def f1(a,b,c=0,*arg ...