MongoDB高级查询-shell篇
翻译自http://www.mongodb.org/display/DOCS/Advanced+Queries部分内容。
其实内容并不难理解,主要照顾英语苦手的兄弟们,也方便自己。
这里主要是讲MongoDB在控制台中如何进行高级查询,既有教程内容,也有ME动手实验的经验,搞懂了这些规则,对于你再使用其他语言(Java,ruby,python等)实现查询时有莫大的帮助,因为基础的是相通的,只是不同的语言实现接口略有差异而已。
还有一句想提醒大家,多动手实验,才是硬道理。
<,>,>=,<=
这四个就不用解释了,最常用的,也是最简单的。
db.collection.find({ "field" : { $gt: value } } ) // 大于 : field > value
db.collection.find({ "field" : { $lt: value } } ) // 小于 : field < value
db.collection.find({ "field" : { $gte: value } } ) // 大于等于 : field >= value
db.collection.find({ "field" : { $lte: value } } ) // 小于等于 : field <= value
如果要同时满足多个条件,记得要这样用:
db.collection.find({ "field" : { $gt: value1, $lt: value2 } } ) // value1 < field < value
$ne 不等于
db.things.find( { x : { $ne : 3 } } )
条件相当于x<>3,即x不等于3。
$mod 取模运算
db.things.find( { a : { $mod : [ 10 , 1 ] } } )
条件相当于a % 10 == 1 即a除以10余数为1的。
$nin 不属于
db.things.find({j:{$nin: [2,4,6]}})
条件相当于 j 不等于 [2,4,6] 中的任何一个。
$in 属于
db.things.find({j:{$in: [2,4,6]}})
条件相当于j等于[2,4,6]中的任何一个。
$all 全部属于
db.things.find( { a: { $all: [ 2, 3 ] } } )
与$in类似,但必须是[]的值全部都存在。
$size 数量,尺寸
db.things.find( { a : { $size: 1 } } )
条件相当于a的值的数量是1(a必须是数组,一个值的情况不能算是数量为1的数组)。
$exists 字段存在
db.things.find( { a : { $exists : true } } )
db.things.find( { a : { $exists : false } } )
true返回存在字段a的数据,false返回不存在字度a的数据。
$type 字段类型
db.things.find( { a : { $type : 2 } } )
条件是a类型符合的话返回数据。
参数类型如下图:
Type Name
|
Type Number
|
Double
|
1
|
String
|
2
|
Object
|
3
|
Array
|
4
|
Binary data
|
5
|
Object id
|
7
|
Boolean
|
8
|
Date
|
9
|
Null
|
10
|
Regular expression
|
11
|
JavaScript code
|
13
|
Symbol
|
14
|
JavaScript code with scope
|
15
|
32-bit integer
|
16
|
Timestamp
|
17
|
64-bit integer
|
18
|
Min key
|
255
|
Max key
|
127
|
Regular Expressions 正则表达式
db.customers.find( { name : /acme.*corp/i } )
类似sql中的like方法。
行开始 /^ 行结束 $/
这里要特别特别特别地注意一点,关乎查询效率:
While /^a/, /^a./, and /^a.$/ are equivalent and will all use an index in the same way, the later two require scanning the whole string so they will be slower. The first format can stop scanning after the prefix is matched.
意思大概就是指在查询以a开头字符串时,可以有三种形式, /^a/, /^a./,和/^a.$/ 。后面两种形式会扫描整个字符串,查询速度会变慢。第一种形式会在查到符合的开头后停止扫描后面的字符。
所以要特别注意。
几个附加参数:
i的意思是忽略大小写。(这个很重要,很常用)
m的意思是支持多行。(不过ME没有尝试过)
x的意思是扩展。(也没用过)
$or 或 (注意:MongoDB 1.5.3后版本可用)
db.foo.find( { $or : [ { a : 1 } , { b : 2 } ] } )
符合条件a=1的或者符合条件b=2的数据都会查询出来。
与其他字段一起查询:
db.foo.find( { name : "bob" , $or : [ { a : 1 } , { b : 2 } ] } )
符合条件name等于bob,同时符合其他两个条件中任意一个的数据。
Value in an Array 数组中的值
例如数据库中存在这样的数据:
{ "_id" : ObjectId("4c503405645fa23b31e11631"), "colors" : [ "red", "black" ] }
查询
db.things.find( { colors : "red" } );
即可查到上面那条数据。
$elemMatch 要素符合
t.find( { x : { $elemMatch : { a : 1, b : { $gt : 1 } } } } )
结果:
{ "_id" : ObjectId("4b5783300334000000000aa9"),
"x" : [ { "a" : 1, "b" : 3 }, 7, { "b" : 99 }, { "a" : 11 } ]
}
x其中一个要素符合那个检索条件就可以被检索出来。(不过一般谁用像x这样的结构去保存数据呢?)
Value in an Embedded Object 内嵌对象中的值
例如数据库中存在这样的数据:
{ "_id" : ObjectId("4c503773645fa23b31e11632"), "author" : { "name" : "Dan Brown", "age" : 38 }, "book" : "The Lost Symbol" }
查询:
db.postings.find( { "author.name" : "Dan Brown" } );
即可查到上面那条数据。
查询内嵌对象的属性,记得要加上“”,字段是“author.name”,而不是author.name。
$not 不是
db.customers.find( { name : { $not : /acme.*corp/i } } );
这是一个与其他查询条件组合使用的操作符,不会单独使用。
只要你理解了前面的查询操作即可,只是再加上了$not,结果就是得到了没有$not的相反结果集。
$where 貌似是JavaScript特用的操作符。(先不解释了)
PS:竟然太长了,一篇发布不了,哎~~~~
相关推荐
在本篇文章中,我们将深入探讨 MongoDB 的核心特性,以及在安装和配置 MongoDB 5.0.6 服务端时需要注意的关键点。 一、MongoDB 的主要特性 1. 文档型数据模型:MongoDB 使用 JSON-like 的文档结构(BSON)存储数据...
- **第二章**:引导读者通过JavaScript Shell进行交互,深入了解MongoDB的文档数据模型。 - **第三章**:介绍如何编写MongoDB应用程序,为读者提供一个初步的应用实践。 ##### 3. 第二部分:深入理解MongoDB文档...
### MongoDB管理与开发精要...以上内容概括了《MongoDB管理与开发精要》的主要知识点,涵盖了MongoDB的基础概念、安装配置、数据管理、高级查询、存储优化等方面,旨在帮助读者全面掌握MongoDB的核心技术和实践技巧。
本篇文章将深入探讨MongoDB的核心概念、主要特点、安装配置、数据模型、查询操作以及高级特性。 1. MongoDB核心概念: - 文档(Document):MongoDB中的数据以键值对的形式存储,这种形式被称为文档,类似于JSON...
本篇实战笔记主要针对 MongoDB 3.2 版本,涵盖其安装、配置、基本操作以及一些高级功能。 #### 二、准备工作 在开始实战之前,我们需要做一些准备工作: 1. **网络环境**:确保计算机可以联网,以便下载相关软件和...
第1篇 基础篇 第1章 MongoDB简介 1.1 关系型数据库简介 1.2 关系型数据库面临的问题 1.3 NoSQL的崛起 1.4 MongoDB是如何解决这些问题的 1.5 初识MongoDB 1.5.1 MongoDB的特点 1.5.2 数据模型 ...
MongoDB 是一个流行的开源NoSQL数据库,它使用文档型...理解这些基本操作对于进一步掌握MongoDB的查询语法、数据模型和高级特性至关重要。随着对MongoDB的深入学习,你将能够熟练地利用其优势构建高效的数据驱动应用。
本篇文章将详细介绍如何使用 MongoDB 的命令行工具 `mongo` 将查询结果导出到文件,并探讨相关知识点。 首先,我们来看一下提供的 `dump.js` 脚本。这段 JavaScript 代码运行在 MongoDB 的 shell 环境中,执行了...
详细讲解了如何利用 MongoDB 的内置 shell 进行数据操作,包括文档的插入、查询等基本操作。 - **第 3 章:使用 MongoDB 编写程序**。介绍了如何通过不同的编程语言(如 Java、Python 等)与 MongoDB 进行交互,并...
MongoDB是一款流行且功能强大的分布式文档数据库,常用于构建现代应用程序。...同时,学习和理解MongoDB的数据模型、查询语法以及复制集、分片等高级特性,将有助于你更好地利用这个强大的数据库系统。
- **通过JavaScript Shell学习MongoDB**:使用JavaScript Shell进行交互式学习。 - **使用MongoDB编写程序**:教授如何在实际项目中集成MongoDB。 ##### 第二部分:应用开发篇 - **文档导向的数据**:解释文档型...
在本篇中,我们将深入探讨如何配置MongoDB的环境,包括启动服务、设置环境变量、通过shell连接以及在Windows上配置环境。 1. **启动 MongoDB 服务** 启动MongoDB服务非常简单,只需在MongoDB安装目录的`bin`目录下...
3. 在MongoDB shell中输入:“db.runCommand({ping:1})”,如果返回结果为"ok": 1,说明MongoDB已成功安装并运行。 七、安全设置 默认情况下,MongoDB在本地连接上允许所有操作。为了生产环境的安全,你需要进行...
本篇文章将深入探讨MongoDB的核心概念、功能以及如何利用这两本书籍——《深入学习MongoDB》和《MongoDB权威指南(第2版)》来提升你的MongoDB技能。 首先,MongoDB的基础知识包括它的NoSQL数据模型。不同于传统的...
6. **Shell集成**:内置了MongoDB的命令行界面,可以直接在工具内运行命令,方便进行高级操作。 7. **导入导出数据**:支持从文件导入数据到MongoDB,也可以将数据导出为JSON、CSV或Excel格式。 8. **脚本执行**:...
第1篇 基础篇 第1章 MongoDB简介 1.1 关系型数据库简介 1.2 关系型数据库面临的问题 1.3 NoSQL的崛起 1.4 MongoDB是如何解决这些问题的 1.5 初识MongoDB 1.5.1 MongoDB的特点 1.5.2 数据模型 ...
本篇文章将深入探讨MongoDB的第二部分,主要聚焦于使用Mongo Shell进行数据库操作。 Mongo Shell是MongoDB提供的一种交互式JavaScript环境,用于连接到MongoDB服务器,执行查询、管理数据库和集合、以及执行其他...