MongoDB 基本操作
文章目录
1.insert 插入
操作格式:
- db.<集合>.insertOne(<JSON对象>)
- db.<集合>.insertMany([<JSON对象1>,<JSON对象2>,<JSON对象3>…])
示例:
db.fruit.insertOne({"name":"apple"});
db.fruit.insertMany([
{"name": "apple"},
{"name": "pear"}
]);
2.remove 删除
- remove 命令需要配置查询条件使用
- 匹配查询条件的文档会被删除
- 指定一个空文档条件会删除所有文档(慎用)
示例:
db.<collection_name>.remove({a:1});// 删除 a = 1 的文档
db.<collection_name>.remove({a:{$lt:5});// 删除 a < 5 的文档
db.<collection_name>.remove({});// 删除所有文档
db.<collection_name>.remove();// 报错
3.update 更新
3.1 update 操作
- Update 操作执行格式
- db.<集合>.update(<查询条件>,<更新字段>)
示例:
插入数据
db.fruit.insterMany([
{name:"apple"},
{name:"pear"},
{name:"orange"}
])
更新数据
db.fruit.updateOne({name:"apple"},{$set:{from:"China"}})
找到名称为 apple 的文档,设置 from 字段为 China
3.2 注意点
- 使用 updateOne 表示无论条件匹配多少条件记录,始终只更新第一条
- 使用 updateMany 表示条件匹配多少条就更新多少条
- updateOne/updateMany 方法要求更新条件部分必须具有以下之一,否则将报错
- $set/$unset
- $push/$pushAll/$pop
- $pull/$pullAll
- $addToSet
操作符介绍
- $push:增加一个对象到数组底部
- $pushAll:增加多个对象到数组底部
- $pop:从数组底部删除一个对象
- $pull:如果匹配指定的值,从数组中删除相应的对象
- $pullAll:如果匹配任意的值,从数组中删除相应的对象
- $addToSet:如果不存在则增加一个值到数组
4.find 查找
4.1 关于 find
-
find 是 MongoDB 中查询数据的基本指令,相当于 SQL 中的 SELECT 。
-
find 返回的是游标
4.2 find 示例
- 单条件查询
db.<collection_name>.find({year:1988});
- 多条件 and 查询
db.<collection_name>.find({条件1,条件2});// 形式1
db.<collection_name>.find({$and:[{条件1},{条件2}]}); // 形式2
- 多条件 or 查询
db.<collection_name>.find({$or:[{条件1},{条件2}]})
- 按正则表达式查找
db.<collection_name>.find({"title":/^B/})
4.3 查询条件对照表
SQL | MQL |
---|---|
a = 1 | {a : 1} |
a <> 1 | {a : {$ne : 1}} |
a > 1 | {a : {$gt : 1}} |
a >= 1 | {a : {$gte : 1}} |
a < 1 | {a : {$lt : 1}} |
a <= 1 | {a : {$lte: 1}} |
4.4 查询逻辑对照表
SQL | MQL |
---|---|
a =1 AND b=1 | {a : 1,b : 1} 或者 {$and : [{a : 1},{b : 1}]} |
a =1 OR b = 1 | {$or : [{a : 1},{b : 1}]} |
a IS NULL | {a : {$exists : false}} |
a IN (1,2,3) | {a : {$in : [1,2,3]}} |
4.5 查询逻辑运算符
MQL | SQL | 含义 |
---|---|---|
$lt | < | 存在并小于 |
$lte | <= | 存在并小于等于 |
$gt | > | 存在并大于 |
$gte | >= | 存在并大于等于 |
$ne | <> | 不存在或者存在但不等于 |
$in | in | 存在并在指定数组中 |
$nin | not in | 不存在或者不在指定数组中 |
$or | or | 匹配多个条件中的一个 |
$and | and | 匹配全部条件 |
4.6 find 子文档搜索
- find 支持使用 “field.sub_field” 的形式查询子文档。假设有一个文档:
db.<collection_name>.insertOne({
name: "apple",
from: {
country: "China",
province: "wuhan"
}
})
- 子文档查询
db.<collection_name>.find({
"from.country": "China"
})
4.7 find 数组搜索
- find 支持对数组中的元素进行搜索,假设有一个文档:
db.<collection_name>.insert([
{name: "apple",color:["red","green"]},
{name: "mango",color:["yellow","green"]}
])
- 查询
db.<collection_name>.find({
"color": "red"
})
4.8 find 数组中的多个字段
在数组中搜索子对象的多个字段时,如果使用 $elemMatch,它表示必须是同一个子对象满足多个条件
假设有一个文档
db.<collection_name>.insertOne(
{
"title": "Raiders of the Lost Ark",
"filming_locations": [{
"city": "Los Angeles",
"country": "USA"
}, {
"city": "Florence",
"country": "USA"
}, {
"city": "Rome",
"country": "Italy"
}]
}
)
查询
db.<collection_name>.find({
"filming_locations": {
$elemMatch: {
"city": "Rome",
"country": "Italy"
}
}
})
4.9 控制 find 返回的字段
- find 可以指定只返回指定的字段
- _id 字段必须明确指明不返回,否则默认返回
- 在 MongoDB 中我们称这位投影(projection)
示例:
db.movies.find({"title":"hero"},{"_id":0,"title":1})
不返回 _id,返回 title
5.drop 删除集合
- 使用 db.<集合>.drop() 来删除一个集合
- 集合中的全部文档都会被删除
- 集合相关的索引也会被删除
注意:删除之后无法还原,即使有复制集,集群节点中的集合都会同步被删除
6.dropDatabase 删除数据库
- 使用 db.dropDatabase() 来删除数据库
- 数据库文档也会被删除,磁盘空间释放
7.参考
- 《MongoDB高手课》- 唐建法