mongodb 入门学习-集合、数据增删改查(二) 总结

本文介绍了MongoDB中集合的创建与删除,以及数据的增删改查操作。创建集合时,MongoDB允许在插入数据时自动创建。数据操作包括:使用insert和save添加数据,update进行更新($set和$inc),remove删除数据,find查询数据。MongoDB的语法类似JavaScript,对于已有RDBMS基础的学习者来说易于上手。特别地,update的$inc用于数字加减,$or用于多个条件查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 创建、删除集合

   mongo 默认可以不用创建集合的,当插入数据时,如果指定的集合不存在,会自行创建。也可以直接创建。区别是直接创建可以增加可选参数,指定其大小,文档数量。

创建
db.createCollection(name, options)


db.createCollection("test");

db.createCollection("test", { capped : true, autoIndexId : true, size :  6142800, max : 10000 } )

删除

db.collection.drop()

options 可以是如下参数:

字段类型描述
capped布尔(可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。
当该值为 true 时,必须指定 size 参数。
autoIndexId布尔(可选)如为 true,自动在 _id 字段创建索引。默认为 false。
size数值(可选)为固定集合指定一个最大值,以千字节计(KB)。
如果 capped 为 true,也需要指定该字段。
max数值(可选)指定固定集合中包含文档的最大数量。

 

当创建集合时,为固定集合时,不能进行修改、删除

2 数据的CRUD

   (1)添加数据 通过 db.$collection_name.insert() 或save 进行添加操作,也可以直接插入一个数组。

db.test.insert(document)
或
db.test.save(document)

单个文档
db.collection.insertOne(
   <document>,
   {
      writeConcern: <document>
   }
)


多个文档
db.collection.insertMany(
   [ <document 1> , <document 2>, ... ],
   {
      writeConcern: <document>,
      ordered: <boolean>
   }
)

参数说明:

document:要写入的文档。
writeConcern:写入策略,默认为 1,即要求确认写操作,0 是不要求。
ordered:指定是否按顺序写入,默认 true,按顺序写入。

(2) 更新数据,通过db.update(where,set,{})  进行更新,语法如下

db.collection.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   }
)
参数说明:

query : update的查询条件,类似sql update查询内where后面的。
update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
writeConcern :可选,抛出异常的级别。

 更新时需要注意update 的两种方式,$set 和$inc , $set 设置更新的内容,也可以是指定,默认使用,$inc 是对数字的的操作,通过正负数进行加减操作。

- WriteConcern.NONE:没有异常抛出
- WriteConcern.NORMAL:仅抛出网络错误异常,没有服务器错误异常
- WriteConcern.SAFE:抛出网络错误异常、服务器错误异常;并等待服务器完成写操作。
- WriteConcern.MAJORITY: 抛出网络错误异常、服务器错误异常;并等待一个主服务器完成写操作。
- WriteConcern.FSYNC_SAFE: 抛出网络错误异常、服务器错误异常;写操作等待服务器将数据刷新到磁盘。
- WriteConcern.JOURNAL_SAFE:抛出网络错误异常、服务器错误异常;写操作等待服务器提交到磁盘的日志文件。
- WriteConcern.REPLICAS_SAFE:抛出网络错误异常、服务器错误异常;等待至少2台服务器完成写操作。

 (3)删除数据 通过 db.$collection.remove(where,{}) 进行

db.collection.remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>
   }
)

参数说明:

query :(可选)删除的文档的条件。
justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
writeConcern :(可选)抛出异常的级别。

删除全部数据
db.col.remove({})

 

(4)查询数据  通过  db.collection.find(where, {})

db.collection.find(query, projection)

query :可选,使用查询操作符指定查询条件
projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。

美化输出

db.col.find().pretty()

 (5)过滤条件  多个条件时

AND 通过逗号进行多条件组合

db.col.find({key1:value1, key2:value2}).pretty()
  
OR 通过  $or 的方式

db.col.find(
   {
      $or: [
         {key1: value1}, {key2:value2}
      ]
   }
).pretty()


AND OR 同时存在

db.col.find(
    {"age": {$gt:50},
    $or: [{"name": "zhangsan"},{"title": "测试"}]
}).pretty()

相当于  where age >50 and (name='zhangsan'  or title='测试')
操作格式范例RDBMS中的类似语句
等于{<key>:<value>}db.col.find({"name":"hello"}).pretty()where name = 'hello'
小于{<key>:{$lt:<value>}}db.col.find({"age":{$lt:50}}).pretty()where age < 50
小于或等于{<key>:{$lte:<value>}}db.col.find({"age":{$lte:50}}).pretty()where age <= 50
大于{<key>:{$gt:<value>}}db.col.find({"age":{$gt:50}}).pretty()where age > 50
大于或等于{<key>:{$gte:<value>}}db.col.find({"age":{$gte:50}}).pretty()where age >= 50
不等于{<key>:{$ne:<value>}}db.col.find({"age":{$ne:50}}).pretty()where age != 50

总结,mongo 的增删改查同RDBMS 很像,mongo 的用法更像调用函数,和js 的语法很像,所有如果有基础,学习起来很简单。需要注意的点就是update 和save 可以通过参数来通知如果文档不存在是否插入操作。同时对数字的加减使用$inc ,对或条件使用$or 。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值