mongodb

2022/6/15

# 介绍数据库

# 主要概念

#

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
  • 插入多条
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

#




 











// 查询所有符合条件 -> 【返回数组】
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
  • 查内嵌文档
// 查找movies是hero的这一条数据
{ "hobby" : { "cites" : [ "beijing", "shanghai", "shenzhen" ], "movies" : [ "sanguo", "hero" ] } }

db.user.find({"hobby.movies": "hero"})
1
2
3
4

#

  • 主要方法
// 改一个
db.collection.update()
db.collection.updateOne()

// 改多个
db.collection.updateMany()

// 替换一个
db.collection.replaceOne()
1
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
  • 第三个参数
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

#

一般不用物理删除

  • 主要方法
// 删除多个
db.stu.remove()
db.stu.deleteMany()

// 删除一个
db.stu.deleteOne()
1
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
  • 删除数据库
use test

db.dropDatabase()
1
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}}})

# Mongoose

# Mongoose封装目录

# 导入/导出

上次更新: 9/17/2024