zoukankan      html  css  js  c++  java
  • MongoDB 操作手冊CRUD 更新 update

    改动记录

    概述

        MongoDB提供了update()方法用于更新记录。

    这种方法接受下面參数:
        一个更新条件的JSON对象用于匹配记录,一个更新操作JSON对象用于声明更新操作,和一个选项JSON对象
        声明查询条件,使用和查询一样的结构和语法。
        默认情况下,update()更新单条记录,若要更新多条记录, 请使用multi选项。


    更新记录中的指定字段

        用于更新某个字段的某个值,MongoDB提供了update操作符。比方$set。
        在运行更新操作时,一些操作符回创建没有的字段,如$set。
        測试数据:db.testData.insert({item:'MON2'});

            1.使用update操作符来更新字段值

                对于某条记录。当中item字段值为MNO2,使用$set操作符来更新它的category和details字段,使用$currentDate操作符来更新lastModified字段
                db.testData.update(
                        {item:'MNO2'},
                        {
                            $set:{
                                category:'apparel',
                                details:{model:'14Q3',manufacturer:'XYZ Company'}
                            },
                            $currentDate:{lastModified:true}
                        }
                    );

                    这个更新操作返回包括着操作状态的WriteResult对象。
                    一个成功的更新操作返回例如以下结果:
                        WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
                        nMatched总段表明匹配的记录数。nModified字段表明改动的记录数。


            2.更新内嵌字段

                    使用"."操作符,并将这个属性用引號括起来。

                    例:更新内嵌的model的details字段

                    db.testData.update({item:'ABC1'},{$set:{'details.model':'14Q2'}});      

            3.更新多条记录

    更新包括category,值为”clothing“的全部记录的category值为“apparel”,lastModified字段为当前时间
    db.testData.update(
    {category:'clothing'},
    {
    $set:{category:'apparel'},
    $currentDate:{lastModified:true}
    },
    {multi:true}
    )

    替换记录

    除_id字段外。替换一条记录的全部内容。须要将新的整个记录的对象作为update()方法的第二个參数传进来。
    替换的记录能够与之前的记录有着不同的字段,因为_id字段是 不可变的,在替换记录中能够省略_id字段。

    假设非要包括该字段,必须是集合中存在的一个值。
    例:替换item字段为BE10的记录。

    替换后新的记录将仅仅包括_id字段和替换记录中的字段。
    db.testData.update(
    { item: "BE10" },
    {
    item: "BE05",
    stock: [ { size: "S", qty: 20 }, { size: "M", qty: 5 } ],
    category: "apparel"
    }
    )

    upsert选项

        概述

            默认情况下,假设update()方法中没有匹配记录,这种方法将不运行不论什么操作。

            可是。假设声明upsert:true,在有匹配记录的时候将进行更新,没有匹配的时候将进行插入操作。


        1.替换记录时使用upsert

            当使用update操作来替换一条记录的时候声明upsert:true,假设没有匹配的记录,MongoDB将使用update中的    查询条件创建一条新的记录。然后使用update中的用于替换的记录来替换新创建的记录的除_id字段外的全部内容。
                db.testData.update(
                    { item: "TBD1" },
                    {
                        item: "TBD1",
                        details: { "model" : "14Q4", "manufacturer" : "ABC Company" },
                       stock: [ { "size" : "S", "qty" : 25 } ],
                        category: "houseware"
                    },
                    { upsert: true }
                )

    结果:nUpserted“:1表明
    WriteResult({
    "nMatched" : 0,//没有匹配记录
    "nUpserted" : 1,//插入了一条新的记录
    "nModified" : 0,//没有更新记录
    "_id" : ObjectId("53dbd684babeaec6342ed6c7")//新插入的记录的_id
    })

        2.更新记录时使用upsert

        当使用update操作来更新一条记录的时候声明upsert:true,同上
                db.testData.update(
                    { item: "TBD2" },
                    {
                        $set: {
                            details: { "model" : "14Q3", "manufacturer" : "IJK Co." },
                            category: "houseware"
                        }
                    },
                    { upsert: true }
                )
  • 相关阅读:
    人工大脑项目 —— Nengo
    四种聚类方法之比较
    对淘宝一些规则的一些研究分享
    【转】千万不要在夏季开发苹果应用,否则后果很严重
    Windows2003上使用IIS7 Express使用FastCgi运行php
    傅立叶变换最直白最容易理解最直接最真实最有深度的解释
    音视频技术应用(18) 控制播放进度——av_seek_frame()
    MySQL 中如何定位 DDL 被阻塞的问题
    windows 编译版本异常处理
    R语言的前世今生
  • 原文地址:https://www.cnblogs.com/llguanli/p/6890857.html
Copyright © 2011-2022 走看看