MongoDB笔记(五) 更新操作(详细)

目录

1.修改单个键值对的值($set)

2.运算($inc $mul)

3.修改key名($rename)

4.删除key($unset)

5.比较修改($min $max)

6.更改时间($set)

7.数组和嵌套文档($set)

8.多文档修改

9.增加文档key($set)


创建集合(插入文档):

> db.test.insert(
... {title:"商品购物单1",
... amount:35,
... detail:[{name:"苹果",price:22},
... {name:"面粉",price:79}]
... })
WriteResult({ "nInserted" : 1 })
> db.test.find().pretty()
{
        "_id" : ObjectId("60795de10f65fbc098679fa4"),
        "title" : "商品购物单1",
        "amount" : 35,
        "detail" : [
                {
                        "name" : "苹果",
                        "price" : 22
                },
                {
                        "name" : "面粉",
                        "price" : 79
                }
        ]
}

1.修改单个键值对的值($set)

db.collection.update(<query>,{$set:{<key>:<value>}})
> db.test.update({title:"商品购物单1"},{$set:{title:"商品购物单2"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.test.find().pretty()
{
        "_id" : ObjectId("60795de10f65fbc098679fa4"),
        "title" : "商品购物单2",
        "amount" : 35,
        "detail" : [
                {
                        "name" : "苹果",
                        "price" : 22
                },
                {
                        "name" : "面粉",
                        "price" : 79
                }
        ]
}

2.运算($inc $mul)

db.collection.update(<query>,{$inc:{<key>:<value>}})
//inc表示加法操作 value:加多少
db.collection.update(<query>,{$mul:{<key>:<value>}})
//mul表示乘法操作 value:乘多少倍
> db.test.find().pretty()                            
        "_id" : ObjectId("6090aeaac9d928f0d09ea602"),
        "title" : "商品购物单2",
        "amount" : 35,
        "detail" : [
                {
                        "name" : "苹果",
                        "price" : 22
                },
                {
                        "name" : "面粉",
                        "price" : 79
                }
        ]
}
> db.test.update({title:"商品购物单2"},{$inc:{amount:5}})    //inc表示加法操作
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.test.find().pretty()                        
{
        "_id" : ObjectId("6090aeaac9d928f0d09ea602"),
        "title" : "商品购物单2",
        "amount" : 40,
        "detail" : [
                {
                        "name" : "苹果",
                        "price" : 22
                },
                {
                        "name" : "面粉",
                        "price" : 79
                }
        ]
}
> db.test.update({title:"商品购物单2"},{$mul:{amount:2}})     //mul表示乘法操作
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.test.find().pretty()                      
{
        "_id" : ObjectId("6090aeaac9d928f0d09ea602"),
        "title" : "商品购物单2",
        "amount" : 80,
        "detail" : [
                {
                        "name" : "苹果",
                        "price" : 22
                },
                {
                        "name" : "面粉",
                        "price" : 79
                }
        ]
}

3.修改key名($rename)

db.collection.update(<query>,{$rename:{<old_key>:<new_key>}})
> db.test.insert(
... {_id:10,
... titlss:"商品购物单3",
... amount:55,
... unit:"元",
... detail:[
... {name:"西瓜",price:20.2},
... {name:"面粉",price:90}
... ]})
> db.test.find().pretty()
{ ce:90} ]})
        "_id" : ObjectId("6090aeaac9d928f0d09ea602"),
        "title" : "商品购物单2",
        "amount" : 80,
        "detail" : [
                {
                        "name" : "苹果",
                        "price" : 22
                },
                {
                        "name" : "面粉",
                        "price" : 79
                }
        ]
}
{
        "_id" : 10,
        "titlss" : "商品购物单3",
        "amount" : 55,
        "unit" : "元",
        "detail" : [
                {
                        "name" : "西瓜",
                        "price" : 20.2
                },
                {
                        "name" : "面粉",
                        "price" : 90
                }
        ]
}
> db.test.update({_id:10},{$rename:{"titlss":"title"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.test.find().pretty()
{
        "_id" : ObjectId("6090aeaac9d928f0d09ea602"),
        "title" : "商品购物单2",
        "amount" : 80,
        "detail" : [
                {
                        "name" : "苹果",
                        "price" : 22
                },
                {
                        "name" : "面粉",
                        "price" : 79
                }
        ]
}
{
        "_id" : 10,
        "amount" : 55,
        "unit" : "元",
        "detail" : [
                {
                        "name" : "西瓜",
                        "price" : 20.2
                },
                {
                        "name" : "面粉",
                        "price" : 90
                }
        ],
        "title" : "商品购物单3"
}

4.删除key($unset)

db.collection.update(<query>,{$unset:{<del_key>:<value>}})
> db.test.find().pretty()
{
        "_id" : ObjectId("6090aeaac9d928f0d09ea602"),
        "title" : "商品购物单2",
        "amount" : 80,
        "detail" : [
                {
                        "name" : "苹果",
                        "price" : 22
                },
                {
                        "name" : "面粉",
                        "price" : 79
                }
        ]
}
{
        "_id" : 10,
        "amount" : 55,
        "unit" : "元",
        "detail" : [
                {
                        "name" : "西瓜",
                        "price" : 20.2
                },
                {
                        "name" : "面粉",
                        "price" : 90
                }
        ],
        "title" : "商品购物单3"
}
> db.test.update({_id:10},{$unset:{unit:"元"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.test.find().pretty()                   
{
        "_id" : ObjectId("6090aeaac9d928f0d09ea602"),
        "title" : "商品购物单2",
        "amount" : 80,
        "detail" : [
                {
                        "name" : "苹果",
                        "price" : 22
                },
                {
                        "name" : "面粉",
                        "price" : 79
                }
        ]
}
{
        "_id" : 10,
        "amount" : 55,
        "detail" : [
                {
                        "name" : "西瓜",
                        "price" : 20.2
                },
                {
                        "name" : "面粉",
                        "price" : 90
                }
        ],
        "title" : "商品购物单3"
}

5.比较修改($min $max)

db.collection.update(<query>,{$min:{<key>:<value>}})
//比较满足条件的key位置对应的value 如果条件里的value比较小就修改value值为条件中的值,否则不修改
db.collection.update(<query>,{$max:{<key>:<value>}})
> db.test.find().pretty()                     
{
        "_id" : ObjectId("6090aeaac9d928f0d09ea602"),
        "title" : "商品购物单2",
        "amount" : 80,
        "detail" : [
                {
                        "name" : "苹果",
                        "price" : 22
                },
                {
                        "name" : "面粉",
                        "price" : 79
                }
        ]
}
{
        "_id" : 10,
        "amount" : 55,
        "detail" : [
                {
                        "name" : "西瓜",
                        "price" : 20.2
                },
                {
                        "name" : "面粉",
                        "price" : 90
                }
        ],
        "title" : "商品购物单3"
}
> db.test.update({_id:10},{$min:{amount:50}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.test.find().pretty()
{
        "_id" : ObjectId("6090aeaac9d928f0d09ea602"),
        "title" : "商品购物单2",
        "amount" : 80,
        "detail" : [
                {
                        "name" : "苹果",
                        "price" : 22
                },
                {
                        "name" : "面粉",
                        "price" : 79
                }
        ]
}
{
        "_id" : 10,
        "amount" : 50,
        "detail" : [
                {
                        "name" : "西瓜",
                        "price" : 20.2
                },
                {
                        "name" : "面粉",
                        "price" : 90
                }
        ],
        "title" : "商品购物单3"
}
> db.test.update({_id:10},{$max:{amount:50.5}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.test.find().pretty()
{
        "_id" : ObjectId("6090aeaac9d928f0d09ea602"),
        "title" : "商品购物单2",
        "amount" : 80,
        "detail" : [
                {
                        "name" : "苹果",
                        "price" : 22
                },
                {
                        "name" : "面粉",
                        "price" : 79
                }
        ]
}
{
        "_id" : 10,
        "amount" : 50.5,
        "detail" : [
                {
                        "name" : "西瓜",
                        "price" : 20.2
                },
                {
                        "name" : "面粉",
                        "price" : 90
                }
        ],
        "title" : "商品购物单3"
}

6.更改时间($set)

> db.test.insert({
... _id:11,
... title:"商品购物单4",
... amount:80,
... unit:"元",
... detail:[
... {name:"香蕉",price:50},
... {name:"面粉",price:30}],
... lasttime:ISODate("2017-06-03 15:36:46")
... })
> db.test.find().pretty()
{                                     
        "_id" : ObjectId("6090aeaac9d928f0d09ea602"),
        "title" : "商品购物单2",
        "amount" : 80,
        "detail" : [
                {
                        "name" : "苹果",
                        "price" : 22
                },
                {
                        "name" : "面粉",
                        "price" : 79
                }
        ]
}
{
        "_id" : 10,
        "amount" : 50.5,
        "detail" : [
                {
                        "name" : "西瓜",
                        "price" : 20.2
                },
                {
                        "name" : "面粉",
                        "price" : 90
                }
        ],
        "title" : "商品购物单3"
}
{
        "_id" : 11,
        "title" : "商品购物单4",
        "amount" : 80,
        "unit" : "元",
        "detail" : [
                {
                        "name" : "香蕉",
                        "price" : 50
                },
                {
                        "name" : "面粉",
                        "price" : 30
                }
        ],
        "lasttime" : ISODate("2017-06-03T15:36:46Z")
}
> db.test.update({_id:11},{lasttime:ISODate("2021-5-3 10:56:23")})  //注意时间的格式,这样写会报错,下面的是正确写法
2021-05-04T10:56:42.276+0800 E QUERY    [thread1] Error: invalid ISO date :
ISODate@src/mongo/shell/types.js:65:1
@(shell):1:35
> db.test.update({_id:11},{lasttime:ISODate("2021-05-03 10:56:23")})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.test.find().pretty()
{
        "_id" : ObjectId("6090aeaac9d928f0d09ea602"),
        "title" : "商品购物单2",
        "amount" : 80,
        "detail" : [
                {
                        "name" : "苹果",
                        "price" : 22
                },
                {
                        "name" : "面粉",
                        "price" : 79
                }
        ]
}
{
        "_id" : 10,
        "amount" : 50.5,
        "detail" : [
                {
                        "name" : "西瓜",
                        "price" : 20.2
                },
                {
                        "name" : "面粉",
                        "price" : 90
                }
        ],
        "title" : "商品购物单3"
}
{ "_id" : 11, "lasttime" : ISODate("2021-05-03T10:56:23Z") }
> db.test.update({_id:11},{lasttime:ISODate("2021-05-03 34:56:23")})  //如果时间什么的超出范围,自动加成正确时间
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.test.find().pretty()
{
        "_id" : ObjectId("6090aeaac9d928f0d09ea602"),
        "title" : "商品购物单2",
        "amount" : 80,
        "detail" : [
                {
                        "name" : "苹果",
                        "price" : 22
                },
                {
                        "name" : "面粉",
                        "price" : 79
                }
        ]
}
{
        "_id" : 10,
        "amount" : 50.5,
        "detail" : [
                {
                        "name" : "西瓜",
                        "price" : 20.2
                },
                {
                        "name" : "面粉",
                        "price" : 90
                }
        ],
        "title" : "商品购物单3"
}
{ "_id" : 11, "lasttime" : ISODate("2021-05-04T10:56:23Z") }

//如果只想修改_id:11的单条属性,可以使用第一条$set修改

7.数组和嵌套文档($set)

> db.test.insert(
... {_id:12,
... title:"商品购物单5",
... amount:90,
... unit:"元",
... detail:[
... {name:"葡萄",price:60},
... {name:"面粉",price:30}],
... lasttime:ISODate("2021-05-04 11:03:30"),
... overview:{shop:"丁丁电子商务平台",shopno:5,address:"地球村"}
... })
WriteResult({ "nInserted" : 1 })
> db.test.find().pretty()
{
        "_id" : ObjectId("6090aeaac9d928f0d09ea602"),
        "title" : "商品购物单2",
        "amount" : 80,
        "detail" : [
                {
                        "name" : "苹果",
                        "price" : 22
                },
                {
                        "name" : "面粉",
                        "price" : 79
                }
        ]
}
{
        "_id" : 10,
        "amount" : 50.5,
        "detail" : [
                {
                        "name" : "西瓜",
                        "price" : 20.2
                },
                {
                        "name" : "面粉",
                        "price" : 90
                }
        ],
        "title" : "商品购物单3"
}
{ "_id" : 11, "lasttime" : ISODate("2021-05-04T10:56:23Z") }
{
        "_id" : 12,
        "title" : "商品购物单5",
        "amount" : 90,
        "unit" : "元",
        "detail" : [
                {
                        "name" : "葡萄",
                        "price" : 60
                },
                {
                        "name" : "面粉",
                        "price" : 30
                }
        ],
        "lasttime" : ISODate("2021-05-04T11:03:30Z"),
        "overview" : {
                "shop" : "丁丁电子商务平台",
                "shopno" : 5,
                "address" : "地球村"
        }
}
> db.test.update({_id:12},{$set:{"detail.1":{name:"大米",price:40},"overview.address":"天津市和平区"}})       //下标从0开始
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.test.find().pretty()                                                                         
{
        "_id" : ObjectId("6090aeaac9d928f0d09ea602"),
        "title" : "商品购物单2",
        "amount" : 80,
        "detail" : [
                {
                        "name" : "苹果",
                        "price" : 22
                },
                {
                        "name" : "面粉",
                        "price" : 79
                }
        ]
}
{
        "_id" : 10,
        "amount" : 50.5,
        "detail" : [
                {
                        "name" : "西瓜",
                        "price" : 20.2
                },
                {
                        "name" : "面粉",
                        "price" : 90
                }
        ],
        "title" : "商品购物单3"
}
{
        "_id" : 12,
        "title" : "商品购物单5",
        "amount" : 90,
        "unit" : "元",
        "detail" : [
                {
                        "name" : "葡萄",
                        "price" : 60
                },
                {
                        "name" : "大米",
                        "price" : 40
                }
        ],
        "lasttime" : ISODate("2021-05-04T11:03:30Z"),
        "overview" : {
                "shop" : "丁丁电子商务平台",
                "shopno" : 5,
                "address" : "天津市和平区"
        }
}
{ "_id" : 11, "lasttime" : ISODate("2021-05-04T10:56:23Z") }
> db.test.update({_id:12},{$set:{"detail.1":{name:"大米",price:40},overview.address:"天津市和平区"}})    //引用数组或嵌套文档对象时,都需要加""中间用.分隔,不加会报错
2021-05-04T11:22:30.909+0800 E QUERY    [thread1] SyntaxError: missing : after property id @(shell):1:71

8.多文档修改

db.test.update(<query>,{$set:{<key>:<value>}},{multi:true})
> db.test.find().pretty()                                                                         
{
        "_id" : ObjectId("6090aeaac9d928f0d09ea602"),
        "title" : "商品购物单2",
        "amount" : 80,
        "detail" : [
                {
                        "name" : "苹果",
                        "price" : 22
                },
                {
                        "name" : "面粉",
                        "price" : 79
                }
        ]
}
{
        "_id" : 10,
        "amount" : 50.5,
        "detail" : [
                {
                        "name" : "西瓜",
                        "price" : 20.2
                },
                {
                        "name" : "面粉",
                        "price" : 90
                }
        ],
        "title" : "商品购物单3"
}
{
        "_id" : 12,
        "title" : "商品购物单5",
        "amount" : 90,
        "unit" : "元",
        "detail" : [
                {
                        "name" : "葡萄",
                        "price" : 60
                },
                {
                        "name" : "大米",
                        "price" : 40
                }
        ],
        "lasttime" : ISODate("2021-05-04T11:03:30Z"),
        "overview" : {
                "shop" : "丁丁电子商务平台",
                "shopno" : 5,
                "address" : "天津市和平区"
        }
}
{ "_id" : 11, "lasttime" : ISODate("2021-05-04T10:56:23Z") }
> db.test.update(
... {"detail.name":"面粉","detail.price":{$lte:90}},}
... {$set:{"detail.1":{name:"面粉",price:40}}},
... {multi:true})
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 1 })
> db.test.find().pretty()
{
        "_id" : ObjectId("6090aeaac9d928f0d09ea602"),
        "title" : "商品购物单2",
        "amount" : 80,
        "detail" : [
                {
                        "name" : "苹果",
                        "price" : 22
                },
                {
                        "name" : "面粉",
                        "price" : 40
                }
        ]
}
{
        "_id" : 10,
        "amount" : 50.5,
        "detail" : [
                {
                        "name" : "西瓜",
                        "price" : 20.2
                },
                {
                        "name" : "面粉",
                        "price" : 40
                }
        ],
        "title" : "商品购物单3"
}
{
        "_id" : 12,
        "title" : "商品购物单5",
        "amount" : 90,
        "unit" : "元",
        "detail" : [
                {
                        "name" : "葡萄",
                        "price" : 60
                },
                {
                        "name" : "大米",
                        "price" : 40
                }
        ],
        "lasttime" : ISODate("2021-05-04T11:03:30Z"),
        "overview" : {
                "shop" : "丁丁电子商务平台",
                "shopno" : 5,
                "address" : "天津市和平区"
        }
}
{ "_id" : 11, "lasttime" : ISODate("2021-05-04T10:56:23Z") }

9.增加文档key($set)

> db.test.find().pretty()
{
        "_id" : ObjectId("6090aeaac9d928f0d09ea602"),
        "title" : "商品购物单2",
        "amount" : 80,
        "detail" : [
                {
                        "name" : "苹果",
                        "price" : 22
                },
                {
                        "name" : "面粉",
                        "price" : 40
                }
        ]
}
{
        "_id" : 10,
        "amount" : 50.5,
        "detail" : [
                {
                        "name" : "西瓜",
                        "price" : 20.2
                },
                {
                        "name" : "面粉",
                        "price" : 40
                }
        ],
        "title" : "商品购物单3"
}
{
        "_id" : 12,
        "title" : "商品购物单5",
        "amount" : 90,
        "unit" : "元",
        "detail" : [
                {
                        "name" : "葡萄",
                        "price" : 60
                },
                {
                        "name" : "大米",
                        "price" : 40
                }
        ],
        "lasttime" : ISODate("2021-05-04T11:03:30Z"),
        "overview" : {
                "shop" : "丁丁电子商务平台",
                "shopno" : 5,
                "address" : "天津市和平区"
        }
}
{ "_id" : 11, "lasttime" : ISODate("2021-05-04T10:56:23Z") }
> db.test.update(
... {_id:10},
... {$set:{"detail.0":{name:"西瓜",price:10},unit:"元"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.test.find().pretty()                                                     
{
        "_id" : ObjectId("6090aeaac9d928f0d09ea602"),
        "title" : "商品购物单2",
        "amount" : 80,
        "detail" : [
                {
                        "name" : "苹果",
                        "price" : 22
                },
                {
                        "name" : "面粉",
                        "price" : 40
                }
        ]
}
{
        "_id" : 10,
        "amount" : 50.5,
        "detail" : [
                {
                        "name" : "西瓜",
                        "price" : 10
                },
                {
                        "name" : "面粉",
                        "price" : 40
                }
        ],
        "title" : "商品购物单3",
        "unit" : "元"
}
{
        "_id" : 12,
        "title" : "商品购物单5",
        "amount" : 90,
        "unit" : "元",
        "detail" : [
                {
                        "name" : "葡萄",
                        "price" : 60
                },
                {
                        "name" : "大米",
                        "price" : 40
                }
        ],
        "lasttime" : ISODate("2021-05-04T11:03:30Z"),
        "overview" : {
                "shop" : "丁丁电子商务平台",
                "shopno" : 5,
                "address" : "天津市和平区"
        }
}
{ "_id" : 11, "lasttime" : ISODate("2021-05-04T10:56:23Z") }

下一篇:MongoDB笔记(六) 删除操作(详细)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值