MongoDB 学习4 文档 新增,修改,删除

插入文档

单个插入

这里我都在可视化工具 robo 3T下操作了

user1 = {
    "name":"李四",
    "age":"21",
    "gender":""
    }
   db.userInfo.insert(user1)

这里我定义一个user1,json格式的数据,调用insert命令,成功插入,这个命令也可以插入多条。

需要注意的是,原来userInfo这个集合中没有gender字段,随着这个数据的插入,会新增,不会报错,如果是关系型数据库,肯定报错。

user1 = {
    "name":"李四",
    "age":"21",
    "gender":"",
    "info":{
        "country":"中国",
        "province":"四川",
        "city":"成都"
        }
    }
   db.userInfo.insertOne(user1)

还有insertOne,插入一条数据。

插入数据时,会自动给一个索引列,_id,这是固定的,然后随机生成唯一的值,如果想指定这个值,只需要在user1中声明_id就行了,注意不要重复。

另外我这里声明user1这种json格式的数据,只是为了直观,直接把json写在insert里也可以,但是看着费劲些。

一个特殊的方法save,指定_id的情况下,如果已存在,是修改,不存在是新增,不指定_id,是新增。

user1 = {
    "_id":"1",
    "name":"王五",
    "age":"16",
    "gender":"",
    "info":{
        "country":"中国",
        "province":"北京",
        "city":"北京"
        }
    }
   db.userInfo.save(user1)

第一次执行顺利新增,修改一下age,再次执行,变成更新。


批量插入

很简单,json改成数组就行了

user1 = {
    "_id":"2",
    "name":"露西",
    "age":"11",
    "gender":"",
    "info":{
        "country":"中国",
        "province":"北京",
        "city":"北京"
        }
    }
    user2 = {
    "_id":"3",
    "name":"李雷",
    "age":"18",
    "gender":"",
    "info":{
        "country":"中国",
        "province":"香港",
        "city":"香港"
        }
    }
   db.userInfo.save([user1,user2])

这里定义2个json,调用save方法,插入数组,执行成功。

另外还有insert,insertMany,都一样,插入数组就行。

需要注意的就是save,insert,insertMany 批量插入时参数用[  ]括起来。

 


更新

save可以更新,这里不再细说。

update 用于更新已存在的文档,它的参数如下

db.userInfo.update(query,update,options)

query:要更新数据的查询条件,相当于sql中的where

update:要更新的对象

upsert:可选,如果query后不存在该对象,是否变成新增操作,默认false,不新增

multi:可选,如果query出多条数据,是否全部更新,默认false,只更新第一条

user1 = {
    "name":"莉莉",
    "age":"13",
    "gender":"",
    "info":{
        "country":"中国",
        "province":"北京"
        }
    }

   db.userInfo.update({"name":"露西"},user1)

 db.userInfo.update({"name":"露西"},user1,false,true) 这样就是不新增,可批量修改。

但是update有一个问题就是,会移除忽略的键,例如这个 露西,之前在info中有3个键,我更新的时候把city键去掉了,这样新的 莉莉 文档中,就没有 city这一项,它其实就是一个,全文档的更新操作,而不是只更新我指定的哪些键。

如果要保留忽略的键,需要使用 $set操作符。

 

以updateOne为例

user1 = {
    $set:{
            "age":"15"
        }
    }

   db.userInfo.updateOne({"name":"王五"},user1)

表示只修改王五的age

但是需要注意的是

user1 = {
    $set:{
            "age":"20",
            "info":{
                    "country":"美国"
                }
        }
    }

   db.userInfo.updateOne({"name":"王五"},user1)

info里原本有3个项,这么改完后,只有一个项了,因为$set关注的可能是 info 这个级别,而不是下面的级别,千万要注意。

user1 = {
    $set:{
            "age":"20",
            "nickName":"小五",
            "info":{
                    "country":"美国",
                    "city":"纽约"
                }
        }
    }

   db.userInfo.updateOne({"name":"王五"},user1)

这个nickName和info里的city,原来是没有的,通过修改,又可以新增这两个项。

还有一个批量更新

updateMany,用法是一样的

 


删除

remove

   db.userInfo.remove({"name":"李四"},{justOne:true})

justOne是true表示删除一条name是李四的文档,等同于db.userInfo.deleteOne({"name":"李四"});

如果justOne是false,就是删除所有李四,等同于db.userInfo.deleteMany({"name":"李四"});

删除全部,不推荐用吧

db.userInfo.deleteMany({}) = db.userInfo.remove({})

 

posted @ 2021-05-11 13:24  luytest  阅读(106)  评论(0编辑  收藏  举报