使用mongodb实现简单的读写操作
本文适合初学者,特别是刚刚安装了mongodb数据库的朋友,或在atlas刚拿到免费集群的朋友。
拿到数据库,心情很激动,手痒难耐。特别想向数据库插入几条数据库试试。即使是深夜完成了安装,也忍不住想去完成这些操作。看到数据库里的记录,心中会更有成就感。
这是一个里程碑的时刻,代表着mongodb学习的开始。或者其他任何一种数据库技能学习的开始。
本文基于官方文档,整理出mongodb简单的增删改查操作。
创建操作
创建操作,是向集合中添加一个新的文档。mongodb的一条记录称为一个文档。文档是类似JSON结构的BSON结构的键值对对象,支持字符串,数值,布尔类型,时间,数组,对象等类型。多条文档构成了mongodb的一个集合。
当插入文档的集合不存在时,mongodb自动创建这个集合。
Mongodb提供了两种文档插入方法
db.collection.insertOne()
db.collection.insertMany()
//举例
db.users.insertOne({
name:"sue",
age: 26,
gentle: "Female"
})
db.users.insertMany([{
name:"sue",
age: 26,
gentle: "Female"
},{
name:"james",
age: 28,
gentle: "Male"
}])
其中集合名称是users, 文档是带有三个字段name, age, gentle的对象。
使用insertOne方法,插入一条文档,参数是一个对象。而使用insertMany方法,插入多条文档,参数是一个数组。
Mongodb对单个文档的操作是原子性的,即对于单个文档的操作,只有成功和失败两个结果。成功, 则数据保存到数据库。失败,则没有数据保存到数据库。不会出现保存了一半这样的中间状态。insertOne向数据库中插入一条文档记录,是原子操作。insertMany向数据库插入多条文档,不是原子操作。
查询操作
查询操作,是从数据库的某个集合中读取文档。
mongodb提供find()方法,实现从集合中读取文档数据。
db.collection.find()
在find()方法中,可以带有参数,作为查询参数,限定查询返回值。如对前面插入的user集合进行查询
//查询所有数据
db.users.find()
//查询name为sue的数据
db.users.find({
name: "sue"
})
//限制返回数量
db.users.find().limit(5)
修改操作
修改操作更新数据库制定集合中符合查询条件的文档数据。mongodb提供了几种方法来支持数据的更新
//更新一条数据
db.collection.updateOne()
//更新多条数据
db.collection.updateMany()
//替换一条数据
db.collection.replaceOne()
用户在修改操作的第一个参数指定查询过滤条件,在第二个参数中指定修改字段和目标值。如修改集合users中name为james的age字段
db.users.updateOne({name: "james"},{$set: {"age": 30}})
其中过滤条件{name: "james"}用来筛选集合中符合name是james的文档。使用$set设置更新的字段和字段值。
Mongodb对单个文档的修改是原子性的,因此updateOne(), replaceOne()方法,都是原子操作。updateMany()方法操作单条记录,也是原子性的,操作多条记录时,是非原子操作。
删除操作
删除操作,是删除集合中的文档。mongodb提供了两种方法来删除文档。
//删除一条文档
db.collection.deleteOne()
//删除多条文档
db.collection.deleteMany()
删除方法的参数中指定查询过滤条件,使用该条件查询出来的结果会被删除。如删除users表中男性数据。
db.users.deleteMany({gentle: 'Male'})
删除users表中name是james的数据
db.users.deleteOne({name: 'James'})
Mongodb中对单个文档的操作是原子的。所以deleteOne是原子操作, deleteMany不是原子操作。
一点建议
数据库操作中,修改操作和删除操作,都是比较危险的操作。数据一旦修改保存到数据库,很难恢复到修改前的样子。对于单条数据,恢复起来容易。对于批量数据的修改更新,请使用查询语句反复确认修改删除范围后,再执行操作。并准备好数据恢复脚本。