查询接口
对于查询操作,MongoDB 提供了 db.collection.find() 方法。这个方法接收查询条件和映射两个条件并且返回一个指向匹配文档的 游标 。你可以使用 limits, skip 和 sort orders 来有选择的修饰查询。
下图把 MongoDB 查询操作组成部分进行了高亮显示:
下图展示了使用 SQL 的相同查询:
例子
db.users.find( { age: { $gt: 18 } }, { name: 1, address: 1 } ).limit(5)
这查询从 user 集合中选择符合条件 age 大于 18 的文档。为了指定大于条件,查询条件使用大于(也就是 $gt ) query selection operator 。这个查询最多返回 5 个匹配的文档(或者更准确的说,一个指向这些文档的游标)。这些匹配的文档将仅仅返回 _id, name 和 address 字段。详细信息,请参阅 映射 。
针对以下图表,你可能会考虑查看 Frequently Asked Questions 章节查询一些关于MongoDB的常用问题。
术语和概念
下表中列出了多个SQL中的术语和概念以及相对应的MongoDB中的术语和概念。
数据库 |
数据库 |
表 |
集合 |
行 |
文档 or BSON 文档 |
列 |
字段 |
索引 |
索引 |
表连接 |
内嵌文档和 |
主键 指定任何唯一列或复合列作为主键。 |
主键 在MongoDB里,主键会自动设置为 _id 列。 |
聚合(e.g. group by) |
聚合管道 |
可执行文件
下表中列出了一些数据库的可执行文件名以及相对应的MongoDB的可执行文件名。表中的数据并不是详尽的。
Database Server | mongod |
mysqld |
oracle | IDS | DB2 Server |
Database Client | mongo | mysql | sqlplus | DB-Access | DB2 Client |
示例
下表中列出了多种SQL语句以及相对应的MongoDB的语句。表中的示例有以下假设条件:
-
SQL示例假设在一个名叫``users``的表上执行。
-
MongoDB示例假设在一个名叫``users``的集合上执行,并且包含一些文档,这些文档有如下属性:
{ _id: ObjectId("509a8fb2f3f4948bd2f983a0"), user_id: "abc123", age: 55, status: 'A' }
创建和修改
下表中列出了多种表级别操作的SQL语句以及相对应的MongoDB的语句。
CREATE TABLE users (
id MEDIUMINT NOT NULL
AUTO_INCREMENT,
user_id Varchar(30),
age Number,
status char(1),
PRIMARY KEY (id)
)
|
第一次执行 insert() 操作时隐式创建。如果文档中不指定``_id``列,那么会自动添加``_id``列并默认为主键。 db.users.insert( {
user_id: "abc123",
age: 55,
status: "A"
} )
当然,你也可以显式的创建一个集合: db.createCollection("users")
|
ALTER TABLE users
ADD join_date DATETIME
|
集合中并不强制规定文档的结构;比如:集合级别并没有文档结构转换的语句。 然而,在文档级别,可以使用 :method:`~db.collection.update()`方法中的 :update:`$set`操作符添加新的字段到现有的文档中。 db.users.update(
{ },
{ $set: { join_date: new Date() } },
{ multi: true }
)
|
ALTER TABLE users
DROP COLUMN join_date
|
集合中并不强制规定文档的结构;比如:集合级别并没有文档结构转换的语句。 然而,在文档级别,可以使用 update()`方法中的:update:`$unset 操作符从现有文档中删除一个字段。 db.users.update(
{ },
{ $unset: { join_date: "" } },
{ multi: true }
)
|
CREATE INDEX idx_user_id_asc
ON users(user_id)
|
db.users.ensureIndex( { user_id: 1 } )
|
CREATE INDEX
idx_user_id_asc_age_desc
ON users(user_id, age DESC)
|
db.users.ensureIndex( { user_id: 1, age: -1 } )
|
DROP TABLE users
|
db.users.drop()
|
获取更多信息,查看 db.collection.insert(), db.createCollection(), db.collection.update(), $set, $unset, db.collection.ensureIndex(), indexes, db.collection.drop(), and 数据建模理论.
插入
下表中列出了多种关于插入操作的SQL语句以及相对应的MongoDB语句。
INSERT INTO users(user_id,
age,
status)
VALUES ("bcd001",
45,
"A")
|
db.users.insert(
{ user_id: "bcd001", age: 45, status: "A" }
)
|
获取更多信息,查看 db.collection.insert().
查询
下表中列出了多种关于查询操作的SQL语句以及相对应的MongoDB语句。
SELECT *
FROM users
|
db.users.find()
|
SELECT id,
user_id,
status
FROM users
|
db.users.find(
{ },
{ user_id: 1, status: 1 }
)
|
SELECT user_id, status
FROM users
|
db.users.find(
{ },
{ user_id: 1, status: 1, _id: 0 }
)
|
SELECT *
FROM users
WHERE status = "A"
|
db.users.find(
{ status: "A" }
)
|
SELECT user_id, status
FROM users
WHERE status = "A"
|
db.users.find(
{ status: "A" },
{ user_id: 1, status: 1, _id: 0 }
)
|
SELECT *
FROM users
WHERE status != "A"
|
db.users.find(
{ status: { $ne: "A" } }
)
|
SELECT *
FROM users
WHERE status = "A"
AND age = 50
|
db.users.find(
{ status: "A",
age: 50 }
)
|
SELECT *
FROM users
WHERE status = "A"
OR age = 50
|
db.users.find(
{ $or: [ { status: "A" } ,
{ age: 50 } ] }
)
|
SELECT *
FROM users
WHERE age > 25
|
db.users.find(
{ age: { $gt: 25 } }
)
|
SELECT *
FROM users
WHERE age < 25
|
db.users.find(
{ age: { $lt: 25 } }
)
|
SELECT *
FROM users
WHERE age > 25
AND age <= 50
|
db.users.find(
{ age: { $gt: 25, $lte: 50 } }
)
|
SELECT *
FROM users
WHERE user_id like "%bc%"
|
db.users.find( { user_id: /bc/ } )
|
SELECT *
FROM users
WHERE user_id like "bc%"
|
db.users.find( { user_id: /^bc/ } )
|
SELECT *
FROM users
WHERE status = "A"
ORDER BY user_id ASC
|
db.users.find( { status: "A" } ).sort( { user_id: 1 } )
|
SELECT *
FROM users
WHERE status = "A"
ORDER BY user_id DESC
|
db.users.find( { status: "A" } ).sort( { user_id: -1 } )
|
SELECT COUNT(*)
FROM users
|
db.users.count()
or db.users.find().count()
|
SELECT COUNT(user_id)
FROM users
|
db.users.count( { user_id: { $exists: true } } )
or db.users.find( { user_id: { $exists: true } } ).count()
|
SELECT COUNT(*)
FROM users
WHERE age > 30
|
db.users.count( { age: { $gt: 30 } } )
or db.users.find( { age: { $gt: 30 } } ).count()
|
SELECT DISTINCT(status)
FROM users
|
db.users.distinct( "status" )
|
SELECT *
FROM users
LIMIT 1
|
db.users.findOne()
or db.users.find().limit(1)
|
SELECT *
FROM users
LIMIT 5
SKIP 10
|
db.users.find().limit(5).skip(10)
|
EXPLAIN SELECT *
FROM users
WHERE status = "A"
|
db.users.find( { status: "A" } ).explain()
|
获取更多信息,查看 db.collection.find(), db.collection.distinct(), db.collection.findOne(), $ne $and, $or, $gt, $lt, $exists, $lte, $regex, limit(), skip(), explain(), sort(), and count().
更新
下表中列出了多种关于更新的SQL语句以及相对应的MongoDB语句。
UPDATE users
SET status = "C"
WHERE age > 25
|
db.users.update(
{ age: { $gt: 25 } },
{ $set: { status: "C" } },
{ multi: true }
)
|
UPDATE users
SET age = age + 3
WHERE status = "A"
|
db.users.update(
{ status: "A" } ,
{ $inc: { age: 3 } },
{ multi: true }
)
|
获取更多信息,查看 db.collection.update(), $set, $inc, and $gt.
删除
下表中列出了多种关于删除的SQL语句以及相关的MongoDB语句。
DELETE FROM users
WHERE status = "D"
|
db.users.remove( { status: "D" } )
|
DELETE FROM users
|
db.users.remove({})
|
获取更多信息,查看 db.collection.remove().
更多参考:MongoDB 2.6 中文文档
原文/转自:MongoDB 教程三: 高级查询 (SQL到MongoDB映射表)
相关推荐
自动检测每个SQL表的主键,并将其复制到MongoDB _id字段。 (可选)使用MongoDB ObjectId重新映射替换键和主键,并重新映射外键。 自动正确地跨类型复制(例如,数字和日期)。 用法 安装 首次安装依赖项: npm ...
ToroDB本机实现MongoDB协议,因此您可以将其与MongoDB工具和驱动程序一起使用,并具有一个文档到关系的映射算法,该算法将JSON文档转换为关系表。 ToroDB还提供了本机SQL层以及基于JSON文档的隐式架构的自动数据...
6.1 SQL与MongoDB查询功能的相似点 101 6.1.1 加载MovieLens数据 103 6.1.2 MongoDB中的MapReduce 108 6.2 访问HBase等面向列数据库中的数据 111 6.3 查询Redis数据存储 113 6.4 小结 116 第7章 修改数据存储...
MongoDB简介 MongoDB是一个开源的、文档型的NoSQL数据库...•将文档对象映射到应用程序代码很容易 •具有高度可伸缩性和可用性,并支持开箱即用,无需事先定义结构 •支持MapReduce操作,将大量数据压缩为有用的聚合结
它允许您将 Go 结构映射到数据库中的表。 它旨在非常轻巧,几乎没有超出您真正想要的范围。 例如,在获取数据时,我们不会重新发明查询语法,而是将您的查询委托给底层数据库,因此您可以直接编写 SQL 语句的...
全栈网络开发新手训练营 我对概念的个人注释 :light_bulb: 技术领域 涵盖的主要主题 ... CSS JavaScript ... 映射/过滤/缩小 ES6箭头功能 钩子 JS解构 材质用户界面 使用的工具: 原子 邮差 机器人
Complete_Web_Development_Bootcamp 笔记 涵盖的主要主题 ... CSS JavaScript 引导程序4 DOM和DOM操作 jQuery的 Node.js NPM ...新闻稿网站已部署到: :... 映射/过滤/缩小 ES6箭头功能 钩子 JS解构 材质用户界面 使用的工
GORM(Grails对象映射) [Grails] [Grails]是用于使用[Groovy] [Groovy]编程语言构建Web应用程序的框架。 该项目为Hibernate和NoSQL数据存储上的GORM的新实现提供了GORM API管道。 [Grails]: : [Groovy]: : ...
则启动时会根据代码映射自动生成数据库表,请在启动前修改application.properties中的数据库连接信息 启动方式 本地运行本repo是一个多模块组成,每个一个模块都可以单独打包运行。如果想运行该模块可以找到对应的...
对于此任务,将要使用的DBMS将是PostgreSQL,所涉及的主题将与我SQL-Restudies回购协议(如上链接)类似,但是尝试达到诸如对象关系映射和复杂数据类型之类的更多主题。 此旅程的下一步将是主要使用MongoDB学习...