MongoDB CRUD Operations
CRUD operations create, read, update, and delete documents.
All write operations in MongoDB are atomic on the level of a single document.
MongoDB中所有基于单个document的写操作都是原子性的
启动MongoDB服务,再通过mongo命令开启Mongo Shell操作数据库进行CRUD
- 关于CRUD的操作:https://docs.mongodb.com/manu...
- 关于Mongo Shell提供的方法:https://docs.mongodb.com/manu...
Databases and Collections
MongoDB stores BSON documents, i.e. data records, in collections; the collections in databases.MongoDB stores data records as BSON documents. BSON is a binary representation of JSON documents, though it contains more data types than JSON. For the BSON spec, see bsonspec.org. See also BSON Types.
MongoDB的层级结构为database(数据库)、collection(集合)、document(文档)
- collection对应关系型数据库的表
- document对应关系型数据库的记录
db
命令可以获取当前所使用的数据库,test是连接到MongoDB默认使用的库
> db
test
show dbs
命令可以展示所有数据库(无数据的库不展示)
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
use <db>
命令可以选择要使用的数据库,若库不存在则会自动创建
> use example
switched to db example
> db
example
Create Operations
https://docs.mongodb.com/manu...
MongoDB提供了两种插入文档的方法,操作的collection如果不存在会自动创建
- db.collection.insertOne():创建一条document,关于insertOne的使用
- db.collection.insertMany():创建多条document,关于insertMany的使用
insertOne和insertMany方法的使用
- document:BSON documents,类似JSON但比JSON支持更多数据类型的格式,关于BSON document
# 语法
db.collection.insertOne(<document>)
db.collection.insertMany(<document>)
# 插入一条数据
db.users.insertOne({ name: "sue", age: 26, status: "pending" })
# 插入多条数据
db.users.insertMany([{ name: "zhangsan", age: 23}, { name: "lisi", age: 24 }])
插入数据成功会返回相应的信息
- acknowledged:确认机制,对于正确执行写入的操作MongoDB会返回true
- insertedId:MongoDB为这一条插入的数据自动生成的唯一不重复的ID
show collections
命令可以展示当前数据库下的所有collection
Read Operations
https://docs.mongodb.com/manu...
MongoDB提供了find方法来查询文档
- db.collection.find():查询document,关于find的使用
find方法的使用
- filter:查询的过滤条件
- projection:查询的字段(值为1表示查该字段,反之为0),查询的字段不存在不会导致错误
# 语法
db.collection.find(<filter>, <projection>)
# select * from users
db.users.find({})
# select * from users limit 5
db.users.find().limit(5)
# select name, address from users where name = "bob" and age < 25
db.users.find({ name: "bob", age: { $lt: 25 }}, { name: 1, address: 1 })
通过$lt
这个query operator设置 <
条件,不使用query operator默认为 =
条件,关于更多query operator的使用
Update Operations
https://docs.mongodb.com/manu...
MongoDB提供了三种更新文档的方法
- db.collection.updateOne():更新一个document,关于updateOne的使用
- db.collection.updateMany():更新多个document,关于updateMany的使用
- db.collection.replaceOne():替换一个document,关于replaceOne的使用
update:要更新的字段以及内容,语法如下(字段不存在时会创建字段),
updateOne和updateMany方法的使用
- filter:同查询一样的条件过滤
- update:具体执行的更新操作(使用了$set这样的update operator)关于update operator的使用
- options:选项,具体详见文档
- document:文档,使用replaceOne时需传入新的文档,新的文档如果附带_id字段则该字段值必须和被替换的文档的_id保持一致
# 语法
db.collection.updateOne(<filter>, <update>, <options>)
db.collection.updateMany(<filter>, <update>, <options>)
db.collection.replaceOne(<filter>, <document>, <options>)
# <update>语法
{
<update operator>: { <field1>: <value1>, ... },
<update operator>: { <field2>: <value2>, ... },
...
}
# update users set name = "bob", age = 20 where age > 18 limit 1
db.users.updateOne(
{ age: { $gt: 18 } },
{
$set: { name: "bob" },
$set: { age: 20 }
}
)
# update users set name = "bob", age = 20 where age > 18
db.users.updateMany(
{ age: { $gt: 18 } },
{
$set: { name: "bob" },
$set: { age: 20 }
}
)
# replaceOne相当于直接替换document,仅保持_id一致
db.users.replaceOne(
{ age: { $gt: 18} },
{ name: "bob", age: 20 }
)
Starting in MongoDB 4.2, MongoDB can accept an aggregation pipeline to specify the modifications to make instead of an update document. See the method reference page for details.
从MongoDB4.2开始,MongoDB可以接收一个aggregation pipeline来进行指定的修改
关于aggregation pipeline的具体使用
Delete Operations
https://docs.mongodb.com/manu...
MongoDB提供了两种删除文档的方法
- db.collection.deleteOne():删除一个document,关于deleteOne的使用
- db.collection.deleteMany():删除多个document,关于deleteMany的使用
deleteOne和deleteMany方法的使用
- filter:同查询一样的条件过滤
- options:选项,具体详见文档
# 语法
db.collection.deleteOne(<filter>, <options>)
db.collection.deleteMany(<filter>, <options>)
# delete from users where status = "D" limit 1
db.users.deleteOne({ status: "D" })
# delete from users where status = "D"
db.users.deleteMany({ status: "D" })
# delete from users
db.users.deleteMany({})
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。