MongoDB更新操作replaceOne()

    最近正在学习MongoDB,作为数据库的学习当然是要从CRUD开始学起了。这篇文章默认读者是知道如何安装MongoDB、如何运行MongoDB实例以及了解了MongoDB中的collection、document等相关的概念。

    网上对于MongoDB的增删改查操作的文章不少。但是不少都是旧版本的操作操作说明。MongoDB在3.2版本之后,增删改查的命令发生了一些变化。有写变化网上可以找得到,这句话说完想必大家也都知道后面我想说什么了。是的,就是关于replaceOne()这个方法的。目前为止,我还没有发现一篇比较满意的中文教程。这里就记录一下自己学习replaceOne()的一些心得。

    以下的演示都是在ROBO 3T中操作完成的。

    首先介绍一下replaceOne()这个函数,它主要是起到更新的作用,除此之外还有一些别的作用。我们来看例子。创建一个restaurant集合,包含了以下数据:

//restaurant集合包含以下数据
{ "_id" : 1 , "name" : "Central Perk Cafe" , "Borough" : "Manhattan" },
{ "_id" : 2 , "name" : "Rock A Feller Bar and Grill" , "Borough" : "Queens" , "violations" : 2 },
{ "_id" : 3 , "name" : "Empire State Pub" , "Borough" : "Brooklyn" , "violations" : 0 }
    我们想尝试replace一个文档,文档属性name的值是"Central Perk Cafe",我们想把这个饭店的地点修改成“NewYork”
db.restaurant.replaceOne(
    {name:"Central Perk Cafe"},
    {name:"Central Perk Cafe", Borough:"NewYork"}
)

//匹配并修改成功
{ "acknowledged" : true , "matchedCount" : 1 , "modifiedCount" : 1 }
//如果没有匹配到这个文档,例如我们传入了错误的name值
{ "acknowledged" : true , "matchedCount" : 0 , "modifiedCount" : 0 }
    replaceOne()还可以传入参数UpSert,来看下面这个例子:
db.restaurant.replaceOne(
    {name:"Pizza Rat's Pizzaria"},
    {"_id":4, name" : "Pizza Rat's Pizzaria", "Borough" : "Manhattan", "violations" : 8 },
    {upsert:true}
)

//执行结果
{
    "acknowledged" : true ,
    "matchedCount" : 0 ,
    "modifiedCount" : 0 ,
    "upsertedId" : 4
}
    当没有匹配到带有这个name属性文档的时候,由于传入了upser参数,Mongo就自动为我们创建了这个文档。这里为了对应前面的_id格式,我们显式的指定了这个文档的id是4,当然也可以交由MongoDB自动为我们生成。
    再来看replaceOne()的另外一个参数:Collation,我们首先添加一些测试数据
{ _id: 10, category: "café", status: "A" },
{ _id: 20, category: "cafe", status: "a" },
{ _id: 30, category: "cafE", status: "a" }

db.restaurant.replaceOne(
    { category: "cafe", status: "a" },
    { category: "cafÉ", status: "Replaced" },
    {collation:{locale:"fr",strength:1}}
)
    replaceOne()不仅替换了 "cafÉ"的status,还进行了排序操作。关于“locale”字段具体有哪些属性可以参看官网给出的说明,官网参考地址

    以上,就是一个MongoDB初学者对于replaceOne()函数的具体认识。才疏学浅难免疏漏,还望高手不吝赐教。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值