MongoDB - 文档基本操作 - 增删改查
-
创建
1.1:向集合中添加一个文档:
db.collection_name.insertOne()
-
db.Animals.insertOne({ name: "pig", age: 3, tags: ["black", "white"], size: {height:13, weight:20.12} })
-
undefined
1.2:向集合中添加多个文档:
db.collection_name.insertMany()
-
-
查询
2.1:查看指定集合内的所有的数据:
db.collection_name.find()
。(返回一个数组)-
undefined
-
如果数据过多查看不方便,可以使用
db.collection_name.find().pretty()
命令来调整格式。 -
我们在上面操作的时候,往
Animals
(即collection
)中插入了数据(即document
文档)。 因为没有给文档指定_id
属性,所以数据库为文档自动添加了_id
field(域) ,并且值类型是ObjectId(blablabla)
(即文档的唯一标识,类似于MySQL中的primary key
)。 -
MongoDB中的数字, 默认情况下是 double 类型。如果存整型, 必须使用函数
NumberInt(整型数字)
。
2.2:查询指定集合集合中第一个文档:
db.collection_name.findOne()
。(返回一个对象)2.3:
$in
:查询满足$in:[]
里面任意一个元素的数据;如果有多个查询条件,则用逗号分开。(只能查询单值)-
命令:
db.collection_name.find({$or: [{key1: value1}, {key2: value2},{...}, ...]})
-
Eg:
// db.Animals.find( { age: { $in: [ 1, 3 ] } } ) // or: // db.Animals.find( { age: { $in: [ 3,1 ] } } ) db.Animals.find( { age: { $in: [ 1,3 ] } } )
undefined
2.4:
$or
:查询满足$or:[]
中任意一个字段的数据。-
命令:
db.collection_name.find({$or: [{key1: value1}, {key2: value2},{...}, ...]})
-
Eg:
// db.Animals.find({$or: [{age: 1}, {name: "pig"}]}) db.Animals.find({ $or: [{age: 1}, {name: "pig"}] })
undefined
2.5:
$all
:查询同时满足$all:[]
中所有元素的数据。-
命令:
db.collection_name.find( { key: { $all:["value1" , "value2",.. ] } } ).pretty()
-
Eg:
db.Animals.find( { tags: { $all:["white" , "black" ] } } ).pretty()
undefined2.6:分页查询:使用
limit
关键字。- Eg:
db.Animals.find().limit(2)
(查询Animals
集合中的前2条记录) 。
2.7:find() + skip() + limit() 方法。
- Eg:
db.Animals.find().skip(1).limit(3)
(查询第2页的3条记录,结合skip()方法,skip(x)是跳过前x条记录)。
-
-
修改
-
常用修改器:为
$set
(赋值)和$unset
(取消赋值)。 -
修改指定字段的值,使用
Update()
方法修改field对应数据的其他内容。Eg:db.Animals.update({name:"pig"},{$set:{tags:["white","grey"]}})
,修改成功如下图所示。注意:update()方法更新时只会更新一个文档,就是说,如果同时存在多条匹配的数据,默认只修改第一条;如果需要修改所有符合条件的数据,则需要写成:db.Animals.update({name:"pig"},{$set:{tags:["white","grey"]}},{multi:true})
undefined -
$inc
修改器:对某列值进行加或减操作。 -
如果修改一条不存在的数据不会报错,会给出未修改的信息
WriteResult({ "nMatched" : 0, "nUpserted" : 0, "nModified" : 0 })
。
-
-
删除
-
删除集合内所有数据。
-
Eg:
db.Animals.remove({})
(删除Animals集合中所有数据)。 -
Eg:
db.Animals.remove({age:1})
(集合中所有满足age:1
的数据都会被删除。)
-
-
删除单个文档:
db.collection.deleteOne()
。 -
从数据库中删除一个集合:
db.collection_name.drop()
。 -
删除数据库:
db.dropDatabase()
。 -
删除所有匹配的文档。
- Eg:
db.Animals.deleteMany( { gender : { $lt : 50 } } )
- Eg:
-
PS:一般数据库中的数据都不会真正意义上的删除,会添加一个字段来表示这个数据是否被删除。
-
-
排序
-
查询排序:在查询文档内容的时候, 默认是按照
_id
排序。 -
升序排序:
db.Animals.find().sort({age:1})
。( 根据age的值进行升序排序) -
降序排序:
db.Animals.find().sort({age:-1})
。(根据age的值进行降序排序)
-
-
投影
-
异常捕捉处理:
try catch
。-
如果某条数据插入失败, 将会终止插入, 但已经插入成功的数据不会回滚掉。所以批量插入由于数据较多容易出现失败。解决办法: 用
try catch
进行异常捕捉处理,测试的时候可以不处理。 -
语法:
try { code…… } catch (e) { print (e); }
-
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
2020-11-12 CodeForces681C - Heap Operations - 优先队列+模拟