Mongodb Learn

Table of contents

  1. mongodb查询入门
    1. 1、基础概念
    2. 2、入门示例
      1. 创建和修改
      2. 写入记录
      3. 查询/选择
      4. 更新记录
      5. 查询指定的列
      6. 删除记录
  2. 二、查询与映射运算符
    1. 1、常见函数
      1. (1)count()
      2. (2)distinct()
      3. (3)limit()
      4. (3)sort()
      5. (4)查特定列

mongodb查询入门

一、查询入门

1、基础概念

下表介绍了各种SQL术语和概念以及相应的MongoDB术语和概念。

SQL术语/概念 MongoDB术语/概念
database database
table collection
row document or BSON document
column field
index index
table joins $lookup, 嵌入文档
primary key (指定任何唯一的列或列组合作为主键。) primary key (在MongoDB中,主键自动设置为_id字段。)

MySQL中的许多概念在MongoDB中具有相近的类比。

MySQL MongoDB
库 database 库 database
表 table 集合 collection
行 row 文档 document 或 bson 文档
列 column 字段 field
表连接 joins 嵌入文档或链接
索引 index 索引 index
主键 可以自定义 主键 _id

数据库对于的服务也是类似的:

下表展示了一些数据库可执行文件和相应的MongoDB可执行文件。这个表格并不是详尽无遗的。

  MongoDB MySQL Oracle Informix DB2
Database Server mongod mysqld oracle IDS DB2 Server
Database Client mongo mysql sqlplus DB-Access DB2 Client

2、入门示例

下表展示了各种SQL语句和相应的MongoDB语句。表中的例子假设以下条件:

  • SQL示例假设有一个名为users的表。
  • MongoDB示例假设一个名为users的集合,它包含以下原型的文档:
{ 
       _id: ObjectId("509a8fb2f3f4948bd2f983a0"),
       user_id: "abc123",
       age: 55,
       status: 'A'
 }
创建和修改

下表展示了与表级操作相关的各种SQL语句以及相应的MongoDB语句。

SQL Schema语句 MongoDB Schema语句
CREATE TABLE users( id MEDIUMINT NOT NULL AUTO_INCREMENT, user_id Varchar(30), age Number, status char(1), PRIMARY KEY (id) ) 隐式创建的第一个insertOne()insertMany()操作。如果没有指定_id字段,则会自动添加主键_id。 db.users.insertOne( { user_id: “abc123”, age: 55, status: “A” } ) 但是,也可以显式地创建一个集合: db.createCollection(“users”)
ALTER TABLE users ADD join_date DATETIME 集合不描述或不强制其文件结构; 即在集合级别没有结构上的更改。 但是,在文档级别,updateMany()操作可以使用$set运算符将字段添加到现有文档中。 db.users.updateMany( { }, { $set: { join_date: new Date() } } )
ALTER TABLE users DROP COLUMN join_date 集合不描述或不强制其文件结构; 即在集合级别没有结构上的更改。 但是,在文档级别,updateMany()操作可以使用$unset运算符将字段添加到现有文档中。 db.users.updateMany( { }, { $unset: { “join_date”: “” } } )
CREATE INDEX idx_user_id_asc ON users(user_id) db.users.createIndex( { user_id: 1 } )
CREATE INDEX idx_user_id_asc_age_desc ON users(user_id, age DESC) db.users.createIndex( { user_id: 1, age: -1 } )
DROP TABLE users db.users.drop()
写入记录

下表显示了与将记录插入表和相应的MongoDB语句有关的各种SQL语句。

SQL INSERT语句 MongoDB insertOne() Statements
INSERT INTO users(user_id, age, status) VALUES (“bcd001”, 45, “A”) db.users.insertOne( { user_id: “bcd001”, age: 45, status: “A” } )

相关文档:

查询/选择

下表展示了与从表中读取记录相关的各种SQL语句以及相应的MongoDB语句。

注意

除非通过投影明确排除,否则[find()方法始终在返回的文档中包含_id字段。 下面的某些SQL查询可能包含一个_id字段来反映这一点,即使该字段未包含在相应的find()查询中也是如此。

SQL SELECT 语句 MongoDB find() 语句
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( { userid: /bc/ } ) _or db.users.find( { user_id: { $regex: /bc/ } } )
SELECT * FROM users WHERE user_id like “bc%” db.users.find( { userid: /^bc/ } ) _or db.users.find( { user_id: { $regex: /^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( { userid: { $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.aggregate( [ { $group : { _id : “$status” } } ] ) or, for distinct value sets that do not exceed the BSON size limit 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()

相关文档:

更新记录

下表显示了与更新表中的现有记录和相应的MongoDB语句有关的各种SQL语句。

SQL Update Statements MongoDB updateMany() Statements
UPDATE users SET status = “C” WHERE age > 25 db.users.updateMany( { age: { $gt: 25 } }, { $set: { status: “C” } } )
UPDATE users SET age = age + 3 WHERE status = “A” db.users.updateMany( { status: “A” } , { $inc: { age: 3 } } )

相关文档:

查询指定的列

下表展示了与从表中读取记录相关的各种SQL语句以及相应的MongoDB语句。

注意

除非通过投影明确排除,否则[find()方法始终在返回的文档中包含_id字段。 下面的某些SQL查询可能包含一个_id字段来反映这一点,即使该字段未包含在相应的find()查询中也是如此。

SQL SELECT 语句 MongoDB find() 语句
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( { userid: /bc/ } ) _or db.users.find( { user_id: { $regex: /bc/ } } )
SELECT * FROM users WHERE user_id like “bc%” db.users.find( { userid: /^bc/ } ) _or db.users.find( { user_id: { $regex: /^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( { userid: { $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.aggregate( [ { $group : { _id : “$status” } } ] ) or, for distinct value sets that do not exceed the BSON size limit 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()

相关文档

删除记录

下表显示了与从表中删除记录和相应的MongoDB语句有关的各种SQL语句。

SQL Delete Statements MongoDB deleteMany() Statements
DELETE FROM users WHERE status = “D” db.users.deleteMany( { status: “D” } )
DELETE FROM users db.users.deleteMany({})

获得更多信息,请参见:db.collection.deleteMany().

另看:

二、查询与映射运算符

1、常见函数

(1)count()

统计条数。

select count(*) from users; 

db.users.count(); 

(2)distinct()

去重。

select distinct (name) from users; 

db.users.distinct('name');

####

(3)limit()

select * from users limit 10; 

db.users.find().limit(10););

(3)sort()

select * from users order by  opdate  desc; 

db.users.find()..sort({
"opdate":-1
});

排序函数,类似order by 1是升序,-1降序。

(4)查特定列

select name, skills from users;

db.users.find({}, {'name' : 1, 'age' : 1}); 

补充说明: 第一个{} 放where条件 第二个{} 指定那些列显示和不显示 (0表示不显示 1表示显示)