MongoDB基础教程系列--第三篇 MongoDB基本操作(二)
1、集合操作
1.1、创建集合
MongoDB 用 db.createCollection(name, options) 方法创建集合。
格式
1 | db.createCollection( name , options) |
其中,name 是集合名称,是一个字符串;options 是可选项,是一个文档,指定内存大小和索引等选项,具体参数说明如下表:
字段 | 类型 | 说明 |
---|---|---|
capped | 布尔 | (可选)如果为 true,表示为固定集合。固定集合是指具有固定存储空间的集合。 当该值为 true 时,必须指定 size 参数。 |
autoIndexId | 布尔 | (可选)如果为 true,在 _id 字段自动创建索引。默认为 false。 |
size | 数值 | (可选)为固定集合指定一个最大值(以字节计)。 如果 capped 为 true,也需要指定该字段。 |
max | 数值 | (可选)为固定集合指定文档的最大数量。 |
注:1.如果 collection 达到最大存储限制(size)之前达到最大文档数量(max)会删除旧文档。
2.MongoDB 会先检查size值,然后再检查max值
范例
创建一个集合"user",为字段_id创建索引,最大存储空间是10M,最大文档数量为1000
1 2 3 | >db.createCollection( "user" , { capped : true , autoIndexId : true , size : 10485760, max : 1000 } ) { "ok" : 1 } > |
说明
在 MongoDB 中,可以不用createCollection()方法创建集合,是因为在插入文档的时候,会自动创建集合
1 2 3 4 5 6 | >db.myCollection. insert ({ "name" : "liruihuan" }) WriteResult({ "nInserted" : 1 }) >show collections myCollection user > |
其中,show collections 表示显示当前操作数据库内的所有集合。
1.2、删除集合
MongoDB 用 db.collection.drop() 删除集合
格式
1 | db.COLLECTION_NAME. drop () |
如果删除成功返回true,否则,返回false
范例
删除刚才创建的myCollection集合,并显示删除后的集合列表,验证是否删除成功
1 2 3 4 5 | >db.myCollection. drop () true >show collections user > |
2、文档操作
2.1、插入文档
MongoDB 用 insert()或者save()向集合中插入文档
格式
1 | db.collection. insert (document) |
范例
我们向集合"user"中插入{"name":"user1","age":19}文档,插入之前先查询集合"user"中存在的文档,然后再查询插入以后的所有文档,以便确定是否插入成功
1 2 3 4 5 6 7 8 9 10 | > db. user .find() { "_id" : ObjectId( "58e1d2f0bb1bbc3245fa754b" ), "name" : "liruihuan" , "age" : 18 } > db. user . insert ({ "name" : "user1" , "age" :19}) WriteResult({ "nInserted" : 1 }) # 插入一条数据 > db. user .find() { "_id" : ObjectId( "58e1d2f0bb1bbc3245fa754b" ), "name" : "liruihuan" , "age" : 18 } { "_id" : ObjectId( "58e1d2f0bb1bbc3245fa754c" ), "name" : "user1" , "age" : 19 } > |
文档查询用 find() 方法,下一篇会具体讲解。
插入文档也可以使用 db.collection.save(document) 命令。如果不指定 _id 字段 save() 方法类似于 insert() 方法。如果指定 _id 字段,则会更新该 _id 的数据。save() 方法会在下面 更新文档 里面用范例说明。
2.2、更新文档
MongoDB 用 update() 或者 save() 更新集合中的文档
2.2.1、update()
update() 更新已经存在文档的值
格式
1 | db.COLLECTION_NAME. update (SELECTIOIN_CRITERIA, UPDATED_DATA) |
范例
在集合"user"中,将文档原来的name值"user1"更新为"user2",更新之前先查询集合"user"中存在的文档,然后再查询更新以后的所有文档,以便确定是否更新成功
1 2 3 4 5 6 7 8 9 10 | > db. user .find() { "_id" : ObjectId( "58e1d2f0bb1bbc3245fa754b" ), "name" : "liruihuan" , "age" : 18 } { "_id" : ObjectId( "58e1d2f0bb1bbc3245fa754c" ), "name" : "user1" , "age" : 19 } >db. user . update ({ 'name' : 'user1' },{$ set :{ 'name' : 'user2' }}) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) # 输出信息 > db. user .find() { "_id" : ObjectId( "58e1d2f0bb1bbc3245fa754b" ), "name" : "liruihuan" , "age" : 18 } { "_id" : ObjectId( "58e1d2f0bb1bbc3245fa754c" ), "name" : "user2" , "age" : 19 } |
上面范例只会更新第一条发现的文档,若想更新全部发现的文档,则需要用 multi:true ,具体写法如下
1 | db. user . update ({ 'name' : 'user1' },{$ set :{ 'name' : 'user2' }},{multi: true }) |
上文中用到了更新操作符$set,诸如此类的还有:$inc、$unset、$push、$ne等。感兴趣的伙伴们可以到网上查查具体的含义。
2.2.2、save()
save() 方法通过传入的文档来替换已有文档。
格式
1 | db.COLLECTION_NAME.save({_id:ObjectId(),NEW_DATA}) |
范例
用 _id = '58e1d2f0bb1bbc3245fa754b' 的文档替换原来的文档,更新之前先查询集合"user"中存在的文档,然后再查询更新以后的所有文档,以便确定是否更新成功
1 2 3 4 5 6 7 8 9 10 11 12 | > db. user .find() { "_id" : ObjectId( "58e1d2f0bb1bbc3245fa754b" ), "name" : "liruihuan" , "age" : 18 } >db. user .save( { "_id" : ObjectId( "58e1d2f0bb1bbc3245fa754b" ), "name" : "user3" , "age" :20 } ) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) # 输出信息 > db. user .find() { "_id" : ObjectId( "58e1d2f0bb1bbc3245fa754b" ), "name" : "user3" , "age" : 20 } |
2.3、删除文档
MongoDB 用 remove() 删除集合中的文档
格式
1 | db.COLLECTION_NAME.remove(DELLETION_CRITTERIA,justOne) |
justOne 如果设为 true 或 1,则只删除一个文档。
范例
删除 name 为 'user1' 的文档,删除之前先查询集合"user"中存在的文档,然后再查询删除以后的所有文档,以便确定是否删除成功
1 2 3 4 5 6 7 8 9 | > db. user .find() { "_id" : ObjectId( "58e1d2f0bb1bbc3245fa754b" ), "name" : "liruihuan" , "age" : 18 } { "_id" : ObjectId( "58e1d2f0bb1bbc3245fa754c" ), "name" : "user1" , "age" : 19 } { "_id" : ObjectId( "58e1d2f0bb1bbc3245fa754d" ), "name" : "user1" , "age" : 20 } >db. user .remove({ "name" : "user1" }) WriteResult({ "nRemoved" : 2 }) # 删除了两条数据 > db. user .find() <br>{ "_id" : ObjectId( "58e1d2f0bb1bbc3245fa754b" ), "name" : "liruihuan" , "age" : 18 } |
如果只想删除一条记录,则需要设置 justOne 为 1,如下所示:
1 | db. user .remove({ "name" : "user1" },1) |
如果想删除所有记录,可以这样写
1 | db. user .remove({}) |
业精于勤,荒于嬉;行成于思,毁于随。
如果你觉得这篇文章不错或者对你有所帮助,可以通过右侧【打赏】功能,给予博主一点点鼓励和支持
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?