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

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(文档)

image

  • 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如果不存在会自动创建

image

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方法来查询文档

image

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提供了三种更新文档的方法

image

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提供了两种删除文档的方法

image

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({})

l0veyt
4 声望0 粉丝

收藏从未停止,学习从未开始