MongoDB基本操作

网友投稿 515 2022-05-29

MongoDB 基本操作

当前文档基于 MongoDB server version: 4.0.20

0. MongoDB 特性

用MySQL 和 MongoDB 做比较

1. 数据库操作

在mongoDB中, 若数据库不存在,那么只有在库中向集合插入数据的时候才会创建

1.1 用法

查看数据库

show dbs

指定数据库

use Database

查看当前数据库

默认情况下,当前数据库是test

db

MongoDB基本操作

删除数据库

在操作此步骤之前,应当使用 db 确认一下库名

执行dropDatabase() 操作后,当前选择的数据库依然是这个库,只不过是在内存中而已。

db.dropDatabase()

查看数据库版本

db.version()

查看当前库统计信息

db.stats()

1.2 例子

查看当前有哪些数据库

> show dbs admin 0.000GB blogSystem 0.000GB config 0.000GB local 0.000GB >

查看当前数据库

> db test >

创建一个数据库并且查看

> use LearnDB switched to db LearnDB > > db LearnDB >

删除数据库

> db.dropDatabase() { "ok" : 1 } >

查看数据库版本

> db.version() 4.0.20 >

查看当前库统计信息

> db.stats() { "db" : "LearnDB", "collections" : 0, "views" : 0, "objects" : 0, "avgObjSize" : 0, "dataSize" : 0, "storageSize" : 0, "numExtents" : 0, "indexes" : 0, "indexSize" : 0, "fileSize" : 0, "fsUsedSize" : 0, "fsTotalSize" : 0, "ok" : 1 } >

2. 集合操作

默认情况下,mongo在插入文档的时候,集合默认会被创建

2.1 用法

查看当前库的集合

show Collections

插入单条数据

db.CollectionName.insertOne()

插入多条数据

db.CollectionName.insertMany()

删除集合

db.CollectionName.drop()

修改集合名称

db.CollectionName.renameCollection()

创建集合

db.createCollection()

2.2 例子

插入单条数据

> db.stu_info.insertOne({"std_name":"小明","sex":"男","reg_time":Date()}) { "acknowledged" : true, "insertedId" : ObjectId("61d6b4afa5a7b57ea8e0a9db") }

查看当前库的集合

> show collections stu_info >

插入多条数据

> db.stu_info.insertMany([{"std_name":"小刚","sex":"男","reg_time":Date()},{"std_name":"小红","sex":"女","reg_time":Date()}]) { "acknowledged" : true, "insertedIds" : [ ObjectId("61d6b59da5a7b57ea8e0a9dc"), ObjectId("61d6b59da5a7b57ea8e0a9dd") ] } >

删除集合

> db.stu_info.drop() true >

修改集合名称

> db.stu_info.renameCollection("stuInfo") { "ok" : 1 } > show collections stuInfo >

创建集合

默认情况下,向集合中插入数据,会默认创建,还有一种情况,是设置集合为 容量上限模式 ,则需要提前创建

语法

db.createCollection(, { capped: , autoIndexId: , size: , max: , storageEngine: , validator: , validationLevel: , validationAction: , indexOptionDefaults: , viewOn: , pipeline: , collation: , writeConcern: } )

name: 集合名称 capped: 若为true,则创建 有上限模式 的集合 size: 设置上限的最大大小,以字节为单位,若达到最大值,则会删除旧文档 max: 允许最大文档数,当同时设置 size 和 max , 则 size 优先级 大于 max

创建有上限的集合, 允许的条数为5条, 最大容量为1G

> db.createCollection("std_log",{"capped":true , "size": 1073741824 , "max": 5}) { "ok" : 1 } >

测试插入数据

可以发现,插入超过5条后,新插入的数据,会删除旧文档,然后插入新文档

> db.std_log.insertMany([{"id":1,"status":true,"time":Date()},{"id":2,"status":false,"time":Date()},{"id":3,"status":true,"time":Date()},{"id":4,"status":true,"time":Date()},{"id":5,"status":false,"time":Date()}]) { "acknowledged" : true, "insertedIds" : [ ObjectId("61d6c44da5a7b57ea8e0aa01"), ObjectId("61d6c44da5a7b57ea8e0aa02"), ObjectId("61d6c44da5a7b57ea8e0aa03"), ObjectId("61d6c44da5a7b57ea8e0aa04"), ObjectId("61d6c44da5a7b57ea8e0aa05") ] } > db.std_log.find() { "_id" : ObjectId("61d6c44da5a7b57ea8e0aa01"), "id" : 1, "status" : true, "time" : "Thu Jan 06 2022 18:28:29 GMT+0800 (CST)" } { "_id" : ObjectId("61d6c44da5a7b57ea8e0aa02"), "id" : 2, "status" : false, "time" : "Thu Jan 06 2022 18:28:29 GMT+0800 (CST)" } { "_id" : ObjectId("61d6c44da5a7b57ea8e0aa03"), "id" : 3, "status" : true, "time" : "Thu Jan 06 2022 18:28:29 GMT+0800 (CST)" } { "_id" : ObjectId("61d6c44da5a7b57ea8e0aa04"), "id" : 4, "status" : true, "time" : "Thu Jan 06 2022 18:28:29 GMT+0800 (CST)" } { "_id" : ObjectId("61d6c44da5a7b57ea8e0aa05"), "id" : 5, "status" : false, "time" : "Thu Jan 06 2022 18:28:29 GMT+0800 (CST)" } > > db.std_log.insertOne({"id":6,"status":false,"time":Date()}) { "acknowledged" : true, "insertedId" : ObjectId("61d6c4b9a5a7b57ea8e0aa07") } > db.std_log.find() { "_id" : ObjectId("61d6c44da5a7b57ea8e0aa02"), "id" : 2, "status" : false, "time" : "Thu Jan 06 2022 18:28:29 GMT+0800 (CST)" } { "_id" : ObjectId("61d6c44da5a7b57ea8e0aa03"), "id" : 3, "status" : true, "time" : "Thu Jan 06 2022 18:28:29 GMT+0800 (CST)" } { "_id" : ObjectId("61d6c44da5a7b57ea8e0aa04"), "id" : 4, "status" : true, "time" : "Thu Jan 06 2022 18:28:29 GMT+0800 (CST)" } { "_id" : ObjectId("61d6c44da5a7b57ea8e0aa05"), "id" : 5, "status" : false, "time" : "Thu Jan 06 2022 18:28:29 GMT+0800 (CST)" } { "_id" : ObjectId("61d6c4b9a5a7b57ea8e0aa07"), "id" : 6, "status" : false, "time" : "Thu Jan 06 2022 18:30:17 GMT+0800 (CST)" } >

3. 查询操作

3.1 用法

查询集合文档条数

db.CollectionNmae.count()

普通查询

db.CollectionName.find()

格式化显示

db.CollectionName.find().pretty()

比较查询

等于

db.CollectionName.find({k:v})

不等于

db.CollectionName.find({k:{$ne: v})

大于

db.CollectionName.find({k:{$gt: v})

小于

db.CollectionName.find({k:{$lt: v})

大于或等于

db.CollectionName.find({k:{$lte: v})

小于或等于

db.CollectionName.find({k:{$gte: v})

and | or 查询

and

db.CollectionName.find({k:v,k1:v1})

or

db.CollectionName.find({$or:[{k1:v1},{k2:v2}]})

and 和 or 联合查询

db.CollectionName.find({k:v,$or:[{k1:v1},{k2:v2}]})

排序查询

db.CollectionName.find().sort({k:1})

指定返回行数查询

db.CollectionName.find().limit()

db.CollectionName.find().skip()

指定返回域

db.CollectionName.find({k:v},{k1:1,k2:1})

只返回一条

db.CollectionName.findOne({k:v})

只返回一条并且删除该数据

db.CollectionName.findOneAndDelete({k:v})

3.2 例子

数据准备

> use LearnDB switched to db LearnDB > > db.dropDatabase() { "dropped" : "LearnDB", "ok" : 1 } > > > db.stu_info.insertMany([ ... {"name": "小明" , "sex": "男" , "score1": 98 , "score2": 60, "score3": 79 , "score5": 101 , "classID: " : 1}, ... {"name": "小红" , "sex": "女" , "score1": 100 , "score2": 100, "score3": 100 , "score5": 80 , "classID: " : 3}, ... {"name": "小赵" , "sex": "女" , "score1": 80 , "score2": 79, "score3": 33 , "score5": 55 , "classID: " : 3}, ... {"name": "小钱" , "sex": "男" , "score1": 89 , "score2": 36, "score3": 102 , "score5": 65 , "classID: " : 5}, ... {"name": "小李" , "sex": "女" , "score1": 53 , "score2": 91, "score3": 34 , "score5": 19 , "classID: " : 9}, ... {"name": "小王" , "sex": "女" , "score1": 100 , "score2": 100, "score3": 100 , "score5": 99 , "classID: " : 1}, ... {"name": "小周" , "sex": "女" , "score1": 99 , "score2": 94, "score3": 92 , "score5": 90 , "classID: " : 6} ... ]) { "acknowledged" : true, "insertedIds" : [ ObjectId("61d6cac2a5a7b57ea8e0aa08"), ObjectId("61d6cac2a5a7b57ea8e0aa09"), ObjectId("61d6cac2a5a7b57ea8e0aa0a"), ObjectId("61d6cac2a5a7b57ea8e0aa0b"), ObjectId("61d6cac2a5a7b57ea8e0aa0c"), ObjectId("61d6cac2a5a7b57ea8e0aa0d"), ObjectId("61d6cac2a5a7b57ea8e0aa0e") ] } >

查询集合文档条数

> db.stu_info.count() 7 >

普通查询

mongo shell 默认只返回10条,超过10条 需要 根据提示往下翻页

> db.stu_info.find() { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa08"), "name" : "小明", "sex" : "男", "score1" : 98, "score2" : 60, "score3" : 79, "score5" : 101, "classID: " : 1 } { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa09"), "name" : "小红", "sex" : "女", "score1" : 100, "score2" : 100, "score3" : 100, "score5" : 80, "classID: " : 3 } { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa0a"), "name" : "小赵", "sex" : "女", "score1" : 80, "score2" : 79, "score3" : 33, "score5" : 55, "classID: " : 3 } { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa0b"), "name" : "小钱", "sex" : "男", "score1" : 89, "score2" : 36, "score3" : 102, "score5" : 65, "classID: " : 5 } { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa0c"), "name" : "小李", "sex" : "女", "score1" : 53, "score2" : 91, "score3" : 34, "score5" : 19, "classID: " : 9 } { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa0d"), "name" : "小王", "sex" : "女", "score1" : 100, "score2" : 100, "score3" : 100, "score5" : 99, "classID: " : 1 } { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa0e"), "name" : "小周", "sex" : "女", "score1" : 99, "score2" : 94, "score3" : 92, "score5" : 90, "classID: " : 6 } >

指定返回行数查询

查询2个文档

> db.stu_info.find().limit(2) { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa08"), "name" : "小明", "sex" : "男", "score1" : 98, "score2" : 60, "score3" : 79, "score5" : 101, "classID: " : 1 } { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa09"), "name" : "小红", "sex" : "女", "score1" : 100, "score2" : 100, "score3" : 100, "score5" : 80, "classID: " : 3 } >

跳过第1个文档,查询1个文档

> db.stu_info.find().skip(1).limit(1) { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa09"), "name" : "小红", "sex" : "女", "score1" : 100, "score2" : 100, "score3" : 100, "score5" : 80, "classID: " : 3 } >

格式化显示

> db.stu_info.find().pretty().limit(2) { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa08"), "name" : "小明", "sex" : "男", "score1" : 98, "score2" : 60, "score3" : 79, "score5" : 101, "classID: " : 1 } { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa09"), "name" : "小红", "sex" : "女", "score1" : 100, "score2" : 100, "score3" : 100, "score5" : 80, "classID: " : 3 } >

比较查询

等于: 查询 name 等于 小明 的文档

> db.stu_info.find({"name":"小明"}) { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa08"), "name" : "小明", "sex" : "男", "score1" : 98, "score2" : 60, "score3" : 79, "score5" : 101, "classID: " : 1 } >

不等于: 查询 name 不等于 小明 的文档,并且取出第一个

> db.stu_info.find({"name":{$ne:"小明"}}).limit(1).pretty() { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa09"), "name" : "小红", "sex" : "女", "score1" : 100, "score2" : 100, "score3" : 100, "score5" : 80, "classID: " : 3 } >

大于: 查询 socre3 大于100 的文档

> db.stu_info.find({"score3":{$gt:100}}) { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa0b"), "name" : "小钱", "sex" : "男", "score1" : 89, "score2" : 36, "score3" : 102, "score5" : 65, "classID: " : 5 } >

小于: 查询 socre1 小于80 的文档

> db.stu_info.find({"score1":{$lt:80}}) { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa0c"), "name" : "小李", "sex" : "女", "score1" : 53, "score2" : 91, "score3" : 34, "score5" : 19, "classID: " : 9 } >

大于或等于:查询 socre3 大于等于 100 的文档

> db.stu_info.find({"score3":{$gte:100}}) { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa09"), "name" : "小红", "sex" : "女", "score1" : 100, "score2" : 100, "score3" : 100, "score5" : 80, "classID: " : 3 } { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa0b"), "name" : "小钱", "sex" : "男", "score1" : 89, "score2" : 36, "score3" : 102, "score5" : 65, "classID: " : 5 } { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa0d"), "name" : "小王", "sex" : "女", "score1" : 100, "score2" : 100, "score3" : 100, "score5" : 99, "classID: " : 1 } >

大于或等于:查询 socre1 小于等于 80 的文档

> db.stu_info.find({"score1":{$lte:80}}) { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa0a"), "name" : "小赵", "sex" : "女", "score1" : 80, "score2" : 79, "score3" : 33, "score5" : 55, "classID: " : 3 } { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa0c"), "name" : "小李", "sex" : "女", "score1" : 53, "score2" : 91, "score3" : 34, "score5" : 19, "classID: " : 9 } >

and | or 查询

and:查询 score1等于100 score2等于100 的文档

> db.stu_info.find({"score1":100,"score2":100}) { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa09"), "name" : "小红", "sex" : "女", "score1" : 100, "score2" : 100, "score3" : 100, "score5" : 80, "classID: " : 3 } { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa0d"), "name" : "小王", "sex" : "女", "score1" : 100, "score2" : 100, "score3" : 100, "score5" : 99, "classID: " : 1 } >

**or: 查询socre1 等于 53 或者score2等于 94 的文档 **

> db.stu_info.find({$or:[{"score1":53},{"score2":94}]}) { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa0c"), "name" : "小李", "sex" : "女", "score1" : 53, "score2" : 91, "score3" : 34, "score5" : 19, "classID: " : 9 } { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa0e"), "name" : "小周", "sex" : "女", "score1" : 99, "score2" : 94, "score3" : 92, "score5" : 90, "classID: " : 6 } >

and 和 or 联合查询 :查询sex 等于 男 ,在此基础上 查询 score1 等于 99 或者 score1 等于 91 的文档

> db.stu_info.find({"sex":"女",$or:[{"score1":99},{"score2":91}]}) { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa0c"), "name" : "小李", "sex" : "女", "score1" : 53, "score2" : 91, "score3" : 34, "score5" : 19, "classID: " : 9 } { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa0e"), "name" : "小周", "sex" : "女", "score1" : 99, "score2" : 94, "score3" : 92, "score5" : 90, "classID: " : 6 } >

排序查询: 对score1进行升序和降序排序

1: 升序

-1: 降序

> db.stu_info.find().sort({"score1":1}) { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa0c"), "name" : "小李", "sex" : "女", "score1" : 53, "score2" : 91, "score3" : 34, "score5" : 19, "classID: " : 9 } { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa0a"), "name" : "小赵", "sex" : "女", "score1" : 80, "score2" : 79, "score3" : 33, "score5" : 55, "classID: " : 3 } { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa0b"), "name" : "小钱", "sex" : "男", "score1" : 89, "score2" : 36, "score3" : 102, "score5" : 65, "classID: " : 5 } { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa08"), "name" : "小明", "sex" : "男", "score1" : 98, "score2" : 60, "score3" : 79, "score5" : 101, "classID: " : 1 } { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa0e"), "name" : "小周", "sex" : "女", "score1" : 99, "score2" : 94, "score3" : 92, "score5" : 90, "classID: " : 6 } { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa09"), "name" : "小红", "sex" : "女", "score1" : 100, "score2" : 100, "score3" : 100, "score5" : 80, "classID: " : 3 } { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa0d"), "name" : "小王", "sex" : "女", "score1" : 100, "score2" : 100, "score3" : 100, "score5" : 99, "classID: " : 1 } >

> db.stu_info.find().sort({"score1":-1}) { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa09"), "name" : "小红", "sex" : "女", "score1" : 100, "score2" : 100, "score3" : 100, "score5" : 80, "classID: " : 3 } { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa0d"), "name" : "小王", "sex" : "女", "score1" : 100, "score2" : 100, "score3" : 100, "score5" : 99, "classID: " : 1 } { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa0e"), "name" : "小周", "sex" : "女", "score1" : 99, "score2" : 94, "score3" : 92, "score5" : 90, "classID: " : 6 } { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa08"), "name" : "小明", "sex" : "男", "score1" : 98, "score2" : 60, "score3" : 79, "score5" : 101, "classID: " : 1 } { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa0b"), "name" : "小钱", "sex" : "男", "score1" : 89, "score2" : 36, "score3" : 102, "score5" : 65, "classID: " : 5 } { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa0a"), "name" : "小赵", "sex" : "女", "score1" : 80, "score2" : 79, "score3" : 33, "score5" : 55, "classID: " : 3 } { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa0c"), "name" : "小李", "sex" : "女", "score1" : 53, "score2" : 91, "score3" : 34, "score5" : 19, "classID: " : 9 } >

指定返回域: 获取name 和 score1 域的数据

> db.stu_info.find({},{"name":1,"score1":1}) { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa08"), "name" : "小明", "score1" : 98 } { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa09"), "name" : "小红", "score1" : 100 } { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa0a"), "name" : "小赵", "score1" : 80 } { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa0b"), "name" : "小钱", "score1" : 89 } { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa0c"), "name" : "小李", "score1" : 53 } { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa0d"), "name" : "小王", "score1" : 100 } { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa0e"), "name" : "小周", "score1" : 99 } >

只返回一条:查询socre1小于等于100的数据,仅返回一条

> db.stu_info.findOne({"score1": {$lte: 100}}) { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa08"), "name" : "小明", "sex" : "男", "score1" : 98, "score2" : 60, "score3" : 79, "score5" : 101, "classID: " : 1 } >

只返回一条并且删除该数据:查询socre1小于等于100的数据,仅返回一条,并且删除

> db.stu_info.findOneAndDelete({"score1":{$lte:100}}) { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa08"), "name" : "小明", "sex" : "男", "score1" : 98, "score2" : 60, "score3" : 79, "score5" : 101, "classID: " : 1 } > db.stu_info.findOne({"name":"小明"}) null >

4. 更新操作

4.1 用法

更新一个文档

db.CollectionName.updateOne()

更新多个文档

db.CollectionName.updateOne()

db.CollectionName.updateMany()

4.2 例子

只更新一个文档:将 score1 为 100 的文档 新增一个classID 为 16

> db.stu_info.find({"score1":100}) { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa09"), "name" : "小红", "sex" : "女", "score1" : 100, "score2" : 100, "score3" : 100, "score5" : 80, "classID: " : 3 } { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa0d"), "name" : "小王", "sex" : "女", "score1" : 100, "score2" : 100, "score3" : 100, "score5" : 99, "classID: " : 1 } > > db.stu_info.updateOne({"score1":100},{$set:{"classID":16}}) { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 } > > db.stu_info.find({"score1":100}) { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa09"), "name" : "小红", "sex" : "女", "score1" : 100, "score2" : 100, "score3" : 100, "score5" : 80, "classID: " : 3, "classID" : 16 } { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa0d"), "name" : "小王", "sex" : "女", "score1" : 100, "score2" : 100, "score3" : 100, "score5" : 99, "classID: " : 1 } >

更新多个文档

更新所有文档:将 score1 为 100 的文档 设置 新增/设置一个 classID 为 21

> db.stu_info.find({"score1":100}) { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa09"), "name" : "小红", "sex" : "女", "score1" : 100, "score2" : 100, "score3" : 100, "score5" : 80, "classID: " : 3, "classID" : 16 } { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa0d"), "name" : "小王", "sex" : "女", "score1" : 100, "score2" : 100, "score3" : 100, "score5" : 99, "classID: " : 1 } > > db.stu_info.updateMany({"score1":100},{$set:{"classID":21}}) { "acknowledged" : true, "matchedCount" : 2, "modifiedCount" : 2 } > > db.stu_info.find({"score1":100}) { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa09"), "name" : "小红", "sex" : "女", "score1" : 100, "score2" : 100, "score3" : 100, "score5" : 80, "classID: " : 3, "classID" : 21 } { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa0d"), "name" : "小王", "sex" : "女", "score1" : 100, "score2" : 100, "score3" : 100, "score5" : 99, "classID: " : 1, "classID" : 21 } >

5. 删除操作

5.1 用法

删除一条文档

db.CollectionName.deleteOne()

删除多条文档

db.CollectionName.deleteMany()

5.2 例子

删除一条文档:删除socre1为100的一条文档

> db.stu_info.find({"score1":100}) { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa09"), "name" : "小红", "sex" : "女", "score1" : 100, "score2" : 100, "score3" : 100, "score5" : 80, "classID: " : 3, "classID" : 21 } { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa0d"), "name" : "小王", "sex" : "女", "score1" : 100, "score2" : 100, "score3" : 100, "score5" : 99, "classID: " : 1, "classID" : 21 } > > db.stu_info.deleteOne({"score1":100}) { "acknowledged" : true, "deletedCount" : 1 } > > db.stu_info.find({"score1":100}) { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa0d"), "name" : "小王", "sex" : "女", "score1" : 100, "score2" : 100, "score3" : 100, "score5" : 99, "classID: " : 1, "classID" : 21 } >

删除多条文档: 删除socre1小于90的所有文档

> db.stu_info.find({"score1":{$lt:90}}) { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa0a"), "name" : "小赵", "sex" : "女", "score1" : 80, "score2" : 79, "score3" : 33, "score5" : 55, "classID: " : 3 } { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa0b"), "name" : "小钱", "sex" : "男", "score1" : 89, "score2" : 36, "score3" : 102, "score5" : 65, "classID: " : 5 } { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa0c"), "name" : "小李", "sex" : "女", "score1" : 53, "score2" : 91, "score3" : 34, "score5" : 19, "classID: " : 9 } > > db.stu_info.deleteMany({"score1":{$lt:90}}); { "acknowledged" : true, "deletedCount" : 3 } > > db.stu_info.find({"score1":{$lt:90}}) >

6. 索引操作

6.1 用法

查询集合所有

db.CollectionName.getIndexes()

创建索引

db.CollectionName.createIndex()

删除集合除_id以外的所有索引

db.CollectionName.dropIndexes()

删除索引

db.CollectionName.dropIndex()

6.2 例子

查询集合所有

> db.stu_info.getIndexes() [ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "LearnDB.stu_info" } ] >

创建索引

语法

db.collection.createIndex( { "a": 1 }, { unique: true, sparse: true, expireAfterSeconds: 3600 } )

可选参数

background: bool类型 为true则在后台构建索引,默认为false unique: bool类型 为true则创建唯一索引,默认为false name: string类型 索引名称, 如果未指定,mongodb将通过索引字段和排序来生成索引名称 sparse: bool类型 为true则对文档不存在字段数据不启用索引,默认为false expireAfterSeconds: 整形 指定一个值(以秒为单位)作为TTL,设置生存时间

例子1: 给集合stu_info sex name 增加唯一索引

> db.stu_info.getIndexes() [ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "LearnDB.stu_info" } ] > > db.stu_info.createIndex({"name":1} , {"background":true,"unique":true , "name":"stu_info_name"}) { "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 } > > db.stu_info.getIndexes() [ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "LearnDB.stu_info" }, { "v" : 2, "unique" : true, "key" : { "name" : 1 }, "name" : "stu_info_name", "ns" : "LearnDB.stu_info", "background" : true } ] >

尝试新增相同name的文档

> db.stu_info.find() { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa0d"), "name" : "小王", "sex" : "女", "score1" : 100, "score2" : 100, "score3" : 100, "score5" : 99, "classID: " : 1, "classID" : 21 } { "_id" : ObjectId("61d6cac2a5a7b57ea8e0aa0e"), "name" : "小周", "sex" : "女", "score1" : 99, "score2" : 94, "score3" : 92, "score5" : 90, "classID: " : 6 } > > db.stu_info.insertMany([ {"name": "小王" , "sex": "女" , "score1": 100 , "score2": 100, "score3": 100 , "score5": 99 , "classID: " : 1} ]) 2022-01-08T10:56:46.475+0800 E QUERY [js] BulkWriteError: write error at item 0 in bulk operation : BulkWriteError({ "writeErrors" : [ { "index" : 0, "code" : 11000, "errmsg" : "E11000 duplicate key error collection: LearnDB.stu_info index: stu_info_name dup key: { : \"小王\" }", "op" : { "_id" : ObjectId("61d8fd6e3a0069c72ccea003"), "name" : "小王", "sex" : "女", "score1" : 100, "score2" : 100, "score3" : 100, "score5" : 99, "classID: " : 1 } } ], "writeConcernErrors" : [ ], "nInserted" : 0, "nUpserted" : 0, "nMatched" : 0, "nModified" : 0, "nRemoved" : 0, "upserted" : [ ] }) BulkWriteError@src/mongo/shell/bulk_api.js:369:48 BulkWriteResult/this.toError@src/mongo/shell/bulk_api.js:333:24 Bulk/this.execute@src/mongo/shell/bulk_api.js:1173:1 DBCollection.prototype.insertMany@src/mongo/shell/crud_api.js:314:5 @(shell):1:1 >

删除索引:删除stu_info name 索引

> db.stu_info.getIndexes() [ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "LearnDB.stu_info" }, { "v" : 2, "unique" : true, "key" : { "name" : 1 }, "name" : "stu_info_name", "ns" : "LearnDB.stu_info", "background" : true } ] > > db.stu_info.dropIndex("stu_info_name") { "nIndexesWas" : 2, "ok" : 1 } > > db.stu_info.getIndexes() [ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "LearnDB.stu_info" } ] >

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:论文解读系列十一:图神经网络应用于半结构化文档的命名实体识别和关系提取
下一篇:《软件需求分析(第二版)》第 10 章——编写需求文档 重点部分总结
相关文章