mongodb基础篇--文档的CRUD操作-增删改


CRUD 操作指的是对文档进行 create,read,update and delete 操作,即增删改查。

新增

MongoDB 提供了 3 个插入文档的方法:

  1. db.collection.insert()
  2. db.collection.insertOne()
  3. db.collection.insertMany()

db.collection.insertOne() 用于向集合插入单个文档。而 db.collection.insertMany() 和 db.collection.insert() 可以向集合插入多个文档。

insertOne

示例:

db.getCollection('test').insertOne({
	"name": "redis设计与实现",
	"type": "技术",
	"desc": "redis相关介绍",
	"price": "45"
})

执行命令后返回一个结果文档:

{
    "acknowledged" : true,
    "insertedId" : ObjectId("5de22784c5b99911d484e4fe")
}

表示插入成功。其中,acknowledged 代表本次操作的操作状态,状态值包括 true 和 false。insertedId 即该文档的 _id。

insertMany

示例:


db.getCollection('test').insertMany(
[{
    "name" : "Tomcat架构解析",
    "type" : "技术",
    "desc" : "Tomcat相关介绍",
    "price" : "40"
},
{
    "name" : "Netty权威指南(第2版)",
    "type" : "技术",
    "desc" : "netty相关介绍",
    "price" : "50"
}]
)

由于插入两个文档,返回结果如下:

{
    "acknowledged" : true,
    "insertedIds" : [ 
        ObjectId("5de35a12e492c4e276fd5d19"), 
        ObjectId("5de35a12e492c4e276fd5d1a")
    ]
}

insert

insert可以插入单个文档,也可以插入多个文档


修改

MongoDB 提供了几个方法用于更新文档,它们分别是:

  • db.collection.updateOne(filter, update, options) 即使可能有多个文档通过过滤条件匹配到,但是也最多也只更新一个文档
  • db.collection.updateMany(filter, update, options) 更新所有通过过滤条件匹配到的文档
  • db.collection.replaceOne(filter, update, options) 即使可能有多个文档通过过滤条件匹配到,但是也最多也只替换一个文档
  • db.collection.update(filter, update, options) 默认情况下只更新 一个 文档。要更新多个文档,使用 multi 选项。

updateOne

示例:

db.getCollection('test').updateOne(
    {"_id": ObjectId("5de35a12e492c4e276fd5d19")},
    {
       $set:{"num":30}
    }
)

updateMany

updateMany可以更新多个文档,用法和updateOne类似。

db.getCollection('test').updateMany(
    {"name": /Tomcat架构解析/},
    {
       $set:{"num":30}
    }
)

update

update() 方法的语法格式与 updateOne() 相同,但它默认只更新单个文档。
如果想更新所有匹配的文档,可以将指令 multi 设置为 true。效果和updateMany相同。

更新一个:

db.getCollection('test').update(
    {"name": /Tomcat架构解析/},
    {
       $set:{"num":20}
    }
)

更新多个:

db.getCollection('test').update(
    {"name": /Tomcat架构解析/},
    {
       $set:{"num":20}
    },
    {multi:true}
)

replaceOne

replaceOne() 方法会根据查询条件替换集合中的单个文档。

db.getCollection('test').replaceOne(
    {"name": /Tomcat架构解析/},
    {
        "name" : "Tomcat架构解析",
        "type" : "技术",
        "desc" : "Tomcat相关介绍",
        "price" : "40",
        "num" : 30
    }
)

save

db.collection.save()是一个多用途的方法,它会根据 _id 是否存在而选择调用 insert() 或者 update()。

  • 当文档中存在 _id 时,save() 等效于带有 upsert 指令的 update()
  • 当文档中不包含 _id 时,save() 等效于 insert(),此时 MongoShell 将创建一个 ObjectId,并将其分配给 _id

字段更新操作符

MongoDB 中共有 9 个字段更新操作符,它们分别是:

  • $currentDate 将字段的值设置为当前日期,可以是 Date 或 Timestamp。
  • $inc 将指定字段的值与传入的值相加。
  • $min 仅当指定的值小于现有字段值时才更新字段。
  • $max 仅当指定的值大于现有字段值时才更新字段。
  • $mul 将指定字段的值与传入的值相乘。
  • $rename 重命名字段。
  • $set 设置文档中字段的值。
  • $setOnInsert 如果更新导致文档插入,则设置字段的值。对修改现有文档的更新操作没有影响。
  • $unset 从文档中删除指定的字段。
$currentDate

$currentDate 的作用是将字段的值设为当前日期,其语法格式如下:

{ $currentDate: { <field1>: <typeSpecification1>, ... } }

其中,typeSpecification1 可以是一个布尔值、 {$ type: “timestamp”} 或者 {$type: “date”}

示例:

  • 使用bool值或date
db.getCollection('test').update(
    { "_id" : ObjectId("5de22babc5b99911d484e500")},
    {
        $currentDate:{"modify_time":true}
    }
)
db.getCollection('test').update(
    { "_id" : ObjectId("5de22babc5b99911d484e500")},
    {
        $currentDate:{"modify_time":{$type:"date"}}
    }
)

modify_time字段结果如下:

"modify_time" : ISODate("2019-12-01T06:41:36.927Z")
  • 使用timestamp:
db.getCollection('test').update(
    { "_id" : ObjectId("5de22babc5b99911d484e500")},
    {
        $currentDate:{"modify_time":{$type:"timestamp"}}
    }
)

modify_time字段结果如下:

"modify_time" : Timestamp(1575182581, 1)
$ inc和$mul

$inc 的作用是按指定的数量增加字段的值
$mul 的作用是将指定字段的值与传入的值相乘

示例:

db.getCollection('test').update(
    { "_id" : ObjectId("5de22babc5b99911d484e500")},
    {
        $inc:{"num":2}
    }
)
db.getCollection('test').update(
    { "_id" : ObjectId("5de22babc5b99911d484e500")},
    {
        $mul:{"num":2}
    }
)
$ min和$max

$min 是仅当传入的值小于现有字段值时才更新字段。
$max 是仅当传入的值大于现有字段值,则更新对应字段值。

比如原有数据

{
    "_id" : ObjectId("5de22babc5b99911d484e500"),
    "name" : "Tomcat架构解析",
    "type" : "技术",
    "desc" : "Tomcat相关介绍",
    "price" : "40",
    "num" : 64.0,
    "modify_time" : Timestamp(1575182581, 1)
}
  • 使用$min:
db.getCollection('test').update(
    { "_id" : ObjectId("5de22babc5b99911d484e500")},
    {
        $min:{"num":2}
    }
)

因为传入的值2小于原字段值64,num数据被修改为2。

  • 使用$max:
db.getCollection('test').update(
    { "_id" : ObjectId("5de22babc5b99911d484e500")},
    {
        $max:{"num":3}
    }
)

因为传入的值3大于原字段值2,num数据被修改为3。

$unset

$unset 的作用是删除文档中的指定字段

删除字段modify_time:

db.getCollection('test').update(
    { "_id" : ObjectId("5de22babc5b99911d484e500")},
    {
        $unset:{"modify_time":""}
    }
)
$set

$set修改指定的字段


db.getCollection('test').update(
    { "_id" : ObjectId("5de22babc5b99911d484e500")},
    {
        $set:{"num":5}
    }
)
$rename

$rename重命名字段

把字段num修改为字段number:

db.getCollection('test').update(
    { "_id" : ObjectId("5de22babc5b99911d484e500")},
    {
        $rename:{"num":"number"}
    }
)

数组更新操作符

MongoDB 中共有 8 个数组更新操作符,它们是:

  • $ 充当占位符以更新与查询条件匹配的第一个元素。
  • $[] 充当占位符以更新数组中与查询条件匹配的文档中的所有元素。
  • $[] 充当占位符以更新与 arrayFilters匹配查询条件的文档的条件匹配的所有元素。
  • $addToSet 仅当数组中尚不存在元素时才将元素添加到数组中。
  • $pop 删除数组的第一个或最后一个元素。
  • $pull 删除与指定查询匹配的所有数组元素。
  • $push 将元素添加到数组。
  • $pullAll 从数组中删除所有匹配的值。
$pop

$pop 的作用是删除数组的第一个或最后一个元素.

假如有文档:

{
    "_id" : ObjectId("5de22babc5b99911d484e500"),
    "tag" : [ 
        "A", 
        "B", 
        "C", 
        "D"
    ]
}

  • 删除tag第一个元素:
db.getCollection('test').update(
    { "_id" : ObjectId("5de22babc5b99911d484e500")},
    {
        $pop:{"tag":-1}
    }
)
  • 删除tag最后一个元素
db.getCollection('test').update(
    { "_id" : ObjectId("5de22babc5b99911d484e500")},
    {
        $pop:{"tag":1}
    }
)
$push

$push 的作用是将元素添加到数组

  • 添加单个元素到数组:
db.getCollection('test').update(
    { "_id" : ObjectId("5de22babc5b99911d484e500")},
    {
        $push:{"tag":"E"}
    }
)
  • 添加数组,使用$each:
db.getCollection('test').update(
    { "_id" : ObjectId("5de22babc5b99911d484e500")},
    {
        $push:{"tag":{$each:["F","G"]}}
    }
)

使用$position指定数组查询位置,当 $position 为负数时,将会从右往左插入
插入最前面:

db.getCollection('test').update(
    { "_id" : ObjectId("5de22babc5b99911d484e500")},
    {
        $push:{"tag":{$each:["H","I"],$position:0}}
    }
)

删除

MongoDB 提供了几个方法用于删除文档,它们是:

  • db.collection.deleteMany()
  • db.collection.deleteOne()
  • db.collection.remove()

要想从集合中删除所有文档,传递一个空的 filter document {} 给 db.collection.deleteMany() 或 db.collection.remove() 方法.

要想最多删除一个满足指定过滤条件的文档(即使多个文档可以满足该指定过滤条件),使用 db.collection.deleteOne() 方法或使用 db.collection.remove() 方法并将 justOne 参数设置为 true 或 1.

删除一个:

db.getCollection('test').deleteOne({"name": /Tomcat架构解析/})
db.getCollection('test').remove({"name": /Tomcat架构解析/},1)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值