# 介绍数据库
# 主要概念
# 增
db.stu.insert({"name": "hdy", "age": 18})
db.stu.insert([
{"name": "hdy", "age": 18, sex: "man"},
{"name": "hdy", "age": 18, sex: "man"},
{"name": "hdy", "age": 18, sex: "man"}]
)
db.stu.insertOne()
db.stu.insertMany()
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
- 插入多条
for (let i = 0; i < 20000; i++) {
db.user.insert({name: "hdy" + i, age: i})
}
// 单次更新更快
const arr = [];
for (let i = 0; i < 20000; i++) {
arr.push({name: "hdy" + i, age: i});
}
db.user.insert(arr);
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 查
// 查询所有符合条件 -> 【返回数组】
db.stu.find()
// 名字内 有 "hdy"的:可能是字符串,也【可能是数组】
// { "name" : [ "swk", "hdy" ], "age" : 300 }
db.stu.find({name: "hdy"})
db.stu.findMany({name: "hdy"})
// 第一个符合条件的文档 -> 【返回文档对象】
db.stu.findOne({name: "hdy"})
// 统计个数
db.stu.find({name: "hdy"}).count()
db.stu.find({name: "hdy"}).length()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
- 查内嵌文档
// 查找movies是hero的这一条数据
{ "hobby" : { "cites" : [ "beijing", "shanghai", "shenzhen" ], "movies" : [ "sanguo", "hero" ] } }
db.user.find({"hobby.movies": "hero"})
1
2
3
4
2
3
4
# 改
- 主要方法
// 改一个
db.collection.update()
db.collection.updateOne()
// 改多个
db.collection.updateMany()
// 替换一个
db.collection.replaceOne()
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
- options
// 默认用新对象替换旧对象
db.stu.update({name: "hdy"}, {age: 28})
// 修改指定属性 $set
db.stu.update({name: "hdy"}, { $set: {age: 28} })
// 同时可以增加属性
db.stu.update({name: "hdy", age: 28}, { $set:{age: 18, sex: "???"} })
// 删除指定属性:$unset
db.stu.updateMany({name: "hdy", age: 18}, { $unset:{age: 1, sex: 1} })
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
- 第三个参数
db.collection.update(
<query>,
<options>,
{
upsert: boolean,
multi: boolean,
writeConcern: document,
collation: document
}
)
db.stu.update({name: "hdy"}, { $set:{age: 28} }, { multi: true })
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 删
一般不用物理删除
- 主要方法
// 删除多个
db.stu.remove()
db.stu.deleteMany()
// 删除一个
db.stu.deleteOne()
1
2
3
4
5
6
2
3
4
5
6
- 参数
db.stu.remove(<query>, <justOne: boolean>)
// 删除一个
db.stu.remove({age: 28}, true)
// 清空集合(remove必须有参数)
db.stu.remove({})
// 性能更好的清空(删除集合)
db.stu.drop();
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
- 删除数据库
use test
db.dropDatabase()
1
2
3
2
3
# 查 options
操作 | 作用 | 例 |
---|---|---|
$in | 限定某个值的范围 | db.user.find({name: {$in: ["tangseng", "swk"]}}) |
$nin | {name: {$nin: ["tangseng", "swk"]}} | |
$eq | 等于 | {age: {$eq: 500}} |
$ne | 不等于 | {age: {$ne: 500}} |
$gt | 大于 | {age: {$gt: 500}} |
$gte | 大于等于 | {age: {$gte: 500}} |
$lt | 小于 | {age: {$lt: 500}} |
$lte | 小等于 | {age: {$lte: 500}} |
$all | 某个值包含所有 | db.tea.find({"student.book": {$all: ["1", "2"]}}) |
$size | 根据数组大小(只能传数字) | db.tea.find({name: "黄老师", student: {$size: 3}}) |
$regex | 官网 (opens new window) | db.tea.find({name: {$not: {$regex: "^黄"}}}) |
$and | 与 | db.tea.find({"student.age": { $gt: 10}, name: "孙老师"}) |
$or | 或 | db.user.find({$or: [{age: {$lt: 5}}, {age: {$gt: 26}}]}) |
$nor | 不是...也不是... | db.tea.find({$nor: [{name: "孙老师"}, {"student.age": {$gt: 20}}]}) |
$not | 某个值不是 | db.tea.find({"student.age": {$not: {$eq: 20}}}) |
$expr | 内部表达式(a字段大于b字段) | db.monthlyBudget.find({$expr:{$gt:["$a", "$b"]}}) |
限制 | 作用 | 例 |
---|---|---|
limit() | db.user.find({age: {$gt: 19, $lt: 30}}).limit(5) | |
skip | db.user.find().limit(20).skip(5) | |
sort | db.tea.find().sort({"student.0.age": 1}) | |
collation | ||
project | ||
投影 | 说明只需要哪些字段 | db.tea.find({}, {name: 1}) |
- 多条件查询方法
// 与 db.user.find({age: { $gt: 490, $lte: 500 }}) db.tea.find({"student.age": { $gt: 10}, name: "孙老师"}) db.tea.find({$and: [{name: {$eq: "孙老师"}}, {"student.age": {$in: [20, 30]}}]}) // 或 db.user.find({$or: [{age: {$lt: 5}}, {age: {$gt: 26}}]}) // 正则 db.user.find({name: /黄/})
1
2
3
4
5
6
7
8{age: {$eq: 500}} 和 {age: 500} 的区别:age是数组的画第二种方式会查询
包含
# 改 options
命令 | 作用 | 例 |
---|---|---|
$set | 只修改指定数据 | db.tea.update({name: "宋老师"}, {$set: {age: 12}}) |
$inc | 自增 | db.user.update({age: 3}, {$inc: {age: 30}}) |
$addToSet | 操作【数组】如果存在就不添加了,否则推入 | db.user.update({name: "zbj"}, {$addToSet: {"hobby.movies": "Mongo!!"}}) |
$rename | 文档字段改名 | db.articles.updateMany({}, {$rename: {subject: "place"}}) |
$addFields | ||
$project | ||
$unset | 删除文档的某个字段 | db.articles.update({_id: 1}, {$unset: {place: "", views: ""}}) |
$replaceRoot | ||
$replaceWith |
- 操作数组
命令 | 作用 | 例 |
---|---|---|
$push | 推入数据(最后) | db.user.update({name: "zbj"}, {$push: {"hobby.movies": "Mongo!!"}}) |
$pop | 移除第一个或最后一个(-1第一个) | db.tea.update({name: "黄老师"}, {$pop: {"student": -1}}) |
$pull | 移除指定项 | db.profiles.updateOne({_id:1},{$pull:{votes:{$gte:6}}}) |