• MongoDB--使用修改器修改文档


         可以使用修改器啦修改文档,比如增加、删除文档的键值。使用修改器首先要定位到某个文档, 然后再增加相应的修改选项,需要使用update语句

    1.$inc修改器修改文档

    > db.users.findOne({'name':'cd'});
    {
            "_id" : ObjectId("584eafa97629396db95535da"),
            "name" : "cd",
            "sex" : "M",
            "information" : {
                    "age" : 23,
                    "address" : "Shanghai"
            }
    }
    > db.users.update({"name": "cd"},
    ...    {"$inc":{"qq": 123456789}});
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    > db.users.findOne({'name':'cd'});
    {
            "_id" : ObjectId("584eafa97629396db95535da"),
            "name" : "cd",
            "sex" : "M",
            "information" : {
                    "age" : 23,
                    "address" : "Shanghai"
            },
            "qq" : 123456789
    }
    >

      命令解释:

      db.users.findOne() -->查询某个文档,可以添加具体的参数,只返回一个文档,如上例子查询文档键name的值为cd的该文档

      db.users.update() -->更新某个文档,一般带有两个参数,一个参数定位到更新那个文档,另一个参数设置修改内容

     {"$inc":{"key" : "value"}}-->修改键key对应的值,若key不存在,则创建key

     流程:

      1.首先查询name为cd的文档,看文档里面的具体键值

      2.使用修改器$inc和更新语句更新集合中的文档

      3.再次查询name为cd的文档,和步骤1的查询结果对比,看更新文档是否成功

    2.$set修改器修改文档

    > db.users.findOne({"name":"scd"});
    {
            "_id" : ObjectId("58549695a14618fbeef3bf0f"),
            "name" : "scd",
            "sex" : "M",
            "address" : "上海"
    }
    > db.users.update( {"name":"scd"},
    ...     {"$set":{"lang": ["中文", "english"]}});
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    > db.users.findOne({"name":"scd"});
    {
            "_id" : ObjectId("58549695a14618fbeef3bf0f"),
            "name" : "scd",
            "sex" : "M",
            "address" : "上海",
            "lang" : [
                    "中文",
                    "english"
            ]
    }
    >

    3.$unset修改器,删除文档中的某个键

    > db.users.findOne({"name":"scd"});
    {
            "_id" : ObjectId("58549885a14618fbeef3bf11"),
            "name" : "scd",
            "sex" : "M",
            "address" : "上海",
            "lang" : [
                    "中文",
                    "english"
            ]
    }
    > db.users.update({"name":"scd"},
    ...     {"$unset":{"sex":"M"}});
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    > db.users.findOne({"name":"scd"});
    {
            "_id" : ObjectId("58549885a14618fbeef3bf11"),
            "name" : "scd",
            "address" : "上海",
            "lang" : [
                    "中文",
                    "english"
            ]
    }
    >

    操作结果:删除键name值为scd文档的键sex

    4.$set和$inc修改器的区别

      $inc只能由于修改整型、长整型或双精度浮点型的值

    > db.users.findOne({"name":"scd"});
    {
            "_id" : ObjectId("58549885a14618fbeef3bf11"),
            "name" : "scd",
            "address" : "上海",
            "lang" : [
                    "中文",
                    "english"
            ]
    }
    > db.users.update({"name":"scd"},
    ...    {"$inc":{"address": "北京"}});
    WriteResult({
            "nMatched" : 0,
            "nUpserted" : 0,
            "nModified" : 0,
            "writeError" : {
                    "code" : 14,
                    "errmsg" : "Cannot increment with non-numeric argument: {address: "鍖椾含"}"
            }
    })

    使用$inc修改键对应的数值为字符串会报错 "writeError"

    而使用$set可以修改键对应的值为字符类型的数值

    > db.users.findOne({"name":"scd"});
    {
            "_id" : ObjectId("58549885a14618fbeef3bf11"),
            "name" : "scd",
            "address" : "上海",
            "lang" : [
                    "中文",
                    "english"
            ]
    }
    > db.users.update({"name":"scd"},
    ...    {"$set":{"address":"北京"}});
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    > db.users.findOne("name":"scd");
    2016-12-17T09:55:20.213+0800 E QUERY    [thread1] SyntaxError: missing ) after argument list @(shell):1:23
    
    > db.users.findOne({"name":"scd"});
    {
            "_id" : ObjectId("58549885a14618fbeef3bf11"),
            "name" : "scd",
            "address" : "北京",
            "lang" : [
                    "中文",
                    "english"
            ]
    }
    >

    $set修改器可以修改许多类型的数值,如字符串、数组等等

  • 相关阅读:
    HTML5--Video
    线性表简述
    TortoiseSVN使用简介(转)
    JAVA EE(简述)
    WebService
    Java从零开始学四十七(注解简述)
    Java从零开始学四十六(Junit)
    二维数组---模拟斗地主
    Java从零开始学四十五(Socket编程基础)
    Java从零开始学四十四(多线程)
  • 原文地址:https://www.cnblogs.com/shootercheng/p/6189148.html
Copyright © 2020-2023  润新知