最近正在学习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,还进行了排序操作。

来源:https://www.2cto.com/database/201804/738609.html

[转]MongoDB更新操作replaceOne()实例讲解的更多相关文章

  1. MongoDB——更新操作(Update)c#实现

    c#实现 Mongodb存储[文档局部更新] 如下: 递归更新字段  ,构建UpdateDefinition   /// <summary>   /// 构建更新操作定义   /// &l ...

  2. mongodb更新操作

    除了查询条件,还可以使用修改器对文档进行更新. 1. $inc > db.tianyc03.find() { "_id" : ObjectId("50ea6b6f1 ...

  3. Hive操作语句实例讲解(帮助你了解 桶 bucket)

    http://blog.sina.com.cn/s/blog_66474b16010182yu.html这篇可以较好地理解什么是外部表external #创建表人信息表  person(String ...

  4. mongodb 更新操作

    db.aaaa.update({},{$push:{money:{$each:[8,9,10],$slice:-4}}}) db.aaaa.update({},{$addToSet:{money:{$ ...

  5. 实例讲解Springboot整合MongoDB进行CRUD操作的两种方式

    1 简介 Springboot是最简单的使用Spring的方式,而MongoDB是最流行的NoSQL数据库.两者在分布式.微服务架构中使用率极高,本文将用实例介绍如何在Springboot中整合Mon ...

  6. MongoDB 文档的更新操作

    在MongoDB中,更新单个doc的操作是原子性的.默认情况下,如果一个update操作更新多个doc,那么对每个doc的更新是原子性的,但是对整个update 操作而言,不是原子性的,可能存在前面的 ...

  7. java操作mongodb——更新数据

    Java中可以通过updateOne,updateMany,replaceOne方法进行集合的文档更新.但是 _id 是不能更新的 updateOne只会更新一条数据,即使通过Filters.lt(& ...

  8. java操作mongoDB数据库的简单实例

    首先导入mongoDB的jar包 http://pan.baidu.com/s/1bnGMJRD //DataBase.java package com.mongodb.test; import ja ...

  9. [转帖]linux常用命令大全(linux基础命令入门到精通+实例讲解+持续更新+命令备忘录+面试复习)

    linux常用命令大全(linux基础命令入门到精通+实例讲解+持续更新+命令备忘录+面试复习) https://www.cnblogs.com/caozy/p/9261224.html 总结的挺好的 ...

随机推荐

  1. Daily Scrum - 12/07

    Meeting Minutes 确认基本完成了UI组件的基本功能的动画实现: 准备开始实行UI组件的合并: 讨论了长期计划算法的难点,以及简单版本的实现方案. 督促大家更新TFS: Burndown ...

  2. Beta冲刺——day3

    Beta冲刺--day3 作业链接 Beta冲刺随笔集 github地址 团队成员 031602636 许舒玲(队长) 031602237 吴杰婷 031602220 雷博浩 031602134 王龙 ...

  3. ejabberd与XMPP

    ejabberd支持XMPP协议. worktile用ejabberd来做了实时消息推送: https://worktile.com/tech/basic/worktile-real-time-not ...

  4. Linux命令(十五) 打包或解压文件 tar

    目录 1.命令简介 2.常用参数介绍 3.实例 4.直达底部 命令简介 tar 命令用于将文件打包或解压,扩展名一般为 ".tar" ,指定特定的参数可以调用 gzip 或 bzi ...

  5. mybatis 注解和xml 优缺点

    xml: 增加了xml文件,修改麻烦,条件不确定(ifelse判断),容易出错,特殊转义字符比如大于小于 注释: 复杂sql不好用,搜集sql不方便,管理不方便,修改需重新编译 #和$区别: 相同 都 ...

  6. BZOJ4066 简单题(KD-Tree)

    板子题. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> # ...

  7. 简易处理图片在div中居中铺满

    原文地址:http://www.cnblogs.com/JimmyBright/p/7681089.html 经常需要在一个长宽固定的div里存放一个图片,这个图片长宽未知,所以需要图片自适应div显 ...

  8. Problem A: 种树 解题报告

    Problem A: 种树 Description 很久很久以前,一个蒟蒻种了一棵会提问的树,树有\(n\)个节点,每个节点有一个权值,现在树给出\(m\)组询问,每次询问两个值:树上一组点对\((x ...

  9. luogu2375 动物园 (kmp)

    首先求出fail数组,如果没有不重叠的限制的话,我们可以在求fail的时候递推出个数cnt[i]=cnt[fail[i]]+1(这个cnt是算上自己本身==自己本身的) 然后如果是要求不重叠的话,就是 ...

  10. 解题:WC 2018 州区划分

    题面 WC之前写的,补一补,但是基本就是学新知识了 首先可以枚举子集$3^n$转移,优化是额外记录每个集合选取的个数,然后按照选取个数从小到大转移.转移的时候先FWT成“点值”转移完了IFWT回去乘逆 ...