MongoDB学习笔记——文档操作之查询
查询文档
使用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> 也可以使用对应的类型编号, |
<BSON type> 类型对照表,参考官网
MongoDB其他操作符
|
操作符 |
示例 |
备注 |
|
$mod |
{ field: { $mod: [ divisor, remainder ]} } |
匹配字段值对(divisor)取模,值等于(remainder)的文档 |
|
$regex |
{ : { $regex: /pattern/, $options: '<options>' } } |
操作符查询中可以对字符串的执行正则匹配。 MongoDB使用Perl兼容的正则表达式(PCRE)库来匹配正则表达式. options(使用options(使用regex ) i 如果设置了这个修饰符,模式中的字母会进行大小写不敏感匹配。 m 默认情况下,PCRE 认为目标字符串是由单行字符组成的(然而实际上它可能会包含多行).如果目标字符串 |
|
$where |
{$where:whereclause} |
操作符功能强大而且灵活, 但性能较差,他可以使用任意的JavaScript作为查询的一部分,包含JavaScript表达式的字符串或者JavaScript函数。 |
|
$text |
{ $text: { $search: <string>, $language: <string>, $caseSensitive: <boolean>, $diacriticSensitive: <boolean> } } |
针对建立了全文索引的字段,实施全文检索匹配 |
MongoDB学习笔记——文档操作之查询的更多相关文章
- MongoDB学习笔记——文档操作之增删改
插入文档 使用db.COLLECTION_NAME.insert() 或 db.COLLECTION_NAME.save() 方法向集合中插入文档 db.users.insert( { user_id ...
- MongoDB学习笔记二—Shell操作
数据类型 MongoDB在保留JSON基本键/值对特性的基础上,添加了其他一些数据类型. null null用于表示空值或者不存在的字段:{“x”:null} 布尔型 布尔类型有两个值true和fal ...
- MongoDB 集合与文档操作
一.创建DB 1.查看DB >show dbs 2.创建DB >use mydb 3.查看当前DB >db 4.删除DB >use mydb >db.dropDataba ...
- Mongodb学习笔记五(C#操作mongodb)
mongodb c# driver(驱动)介绍 目前基于C#的mongodb驱动有两种,分别是官方驱动(下载地址)和samus驱动(下载地址). 本次我们只演示官方驱动的使用方法. 官方驱动文档查看 ...
- 4. svg学习笔记-文档结构元素和样式的使用
svg除了绘图元素之外还有一部分是专门用于文档结构的,这类元素有<g>,<use>,<defs>,<symbol>等 <g>元素 如果我们仅 ...
- StyleCop学习笔记-文档规则
文档规则: .SA1600:ElementsMustBeDocumented元素必须添加注释 .SA1601: PartialElementsMustBeDocumented Partial修饰的成员 ...
- MongoDB内嵌文档操作
实体定义: [BsonIgnoreExtraElements] public class Person : BaseEntity { public string FirstName { get; se ...
- MongoDB学习笔记~MongoVUE对数据进行查询,排序和按需显示
回到目录 对于MongoDB这个非关系型数据库(NoSql)来说,找一个IDE工具不是很容易,还好被我找到了,它就是大名鼎鼎的MongoVUE,它可以对mongodb数据表进行增删改查,下面我主要说一 ...
- MongoDB 学习笔记(二) 高级查询
1.条件运算符 2.$all 匹配所有 3.$exists 判断字段是否存在 4.NUll 值处理 5.$mod 取模处理 6.$ne 不等于 7. $in 包含,与sql用法相同 8. $nin 不 ...
随机推荐
- IOS开发UI基础UITextFidle相关属性
UITextFidle相关属性 • enablesReturnKeyAutomatically默认为No,如果设置为Yes,文本框中没有输入任何字符的话,右下角的返回按钮是disabled的. ...
- 【推荐】iOS集合视图的可重新排序的layout
在实际项目中你或许会遇到在一个集合视图中移动一项到另外一个位置,那么此时我们需要对视图中的元素进行重新排序,今天推荐一个很好用的第三方类LXReorderableCollectionViewFlowL ...
- C#实战Microsoft Messaging Queue(MSMQ)消息队列(干货)
前言 在使用MSMQ之前,我们需要自行安装消息队列组件!(具体安装方法大家自己搜一下吧) 采用MSMQ带来的好处是:由于是异步通信,无论是发送方还是接收方都不用等待对方返回成功消息,就可以执行余下的代 ...
- 快捷获取浏览器(navigator对象)的全部属性
理论: navigator对象包含关于web浏览器的信息,浏览器的类型,版本信息都可以从该对象获取. 属性 说明 appCodeName 浏览器代码说明 appName 浏览器名称 appVe ...
- C#基本概念列举说明
1. 关键字 在C#代码中常常使用关键字,关键字也叫保留字,是对C#有特定意义的字符串.关键字在Visual Studio 环境的代码视图中默认以蓝色显示.例如,代码中的using.name ...
- 【iOS】Quartz2D图形上下文
一.绘图的完整过程 程序启动,显示自定义的view.当程序第一次显示在我们眼前的时候,程序会调用drawRect:方法,在里面获取了图形上下文(在内存中拥有了),然后利用图形上下文保存绘图信息,可 ...
- ASP.NET Web API默认支持的媒体类型(SupportedMediaTypes)
JsonMediaTypeFormatter XmlMediaTypeFormatter ( application/xml text/xml) FormUrlEncodedMediaTypeFor ...
- ASP.NET本质论第二章应用程序对象学习笔记1
1.请求的处理参数—上下文对象HttpContext 1) 针对每一次请求,ASP.NET将创建一个处理这次请求所使用的HttpContext对象实例,这个对象实例将用来在ASP.NET服务器的处理过 ...
- 初学Node(二)package.json文件
package.json简介 package.json在Node项目中用于描述项目的一些基本信息,以及依赖的配置,一般每一个Node项目的根目录下都有一个package.json文件. 在项目的根目录 ...
- 【使用 DOM】使用 DOM 元素
1. 使用元素对象 HTMLElement对象提供了一组属性,可以用它们来读取和修改被代表的数据.下表介绍了这些属性. 下面代码展示了如何使用表中所列的一些基本属性. <!DOCTYPE htm ...