zoukankan      html  css  js  c++  java
  • [转]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,还进行了排序操作。

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

  • 相关阅读:
    CADisplayLink
    对项目重命名
    TCP|UDP|Http|Socket
    CoreAnimation|动画
    Autolayout
    通讯录
    本地通知
    用于做 Android 屏幕自适应的文章资源
    Java String.format 自动补全不够的位数
    不同语言之间 日期格式转换
  • 原文地址:https://www.cnblogs.com/c-x-a/p/9766692.html
Copyright © 2011-2022 走看看