MongoDB数据修改总结

1.前言

最近在学习MongoDB,数据修改这一部分的内容较多,命令比较繁琐,所以将一些常用的修改命令总结在这篇博客中,方便今后学习的查阅。

2.命令总结

1). insert()

db.collection.insert(x)  x就是要更新的对象,只能是单条记录,如:

[plain]  view plain copy
  1. db.collection.insert({_id:1,name:"test",count:1})  

当需要批量插入的时候,可以在shell中使用for循环,如:

[plain]  view plain copy
  1. for(var i=0;i<16;i++){   
  2.      db.mytest.insert({_id:i,name:"test"+i,count:i})   
  3. }  
此时如果用find()命令查询插入的数据,结果是这样的:
[plain]  view plain copy
  1. > db.mytest.find()  

{ "_id" : 0, "name" : "test0", "count" : 0 }
{ "_id" : 1, "name" : "test1", "count" : 1 }
{ "_id" : 2, "name" : "test2", "count" : 2 }
{ "_id" : 3, "name" : "test3", "count" : 3 }
{ "_id" : 4, "name" : "test4", "count" : 4 }
{ "_id" : 5, "name" : "test5", "count" : 5 }
{ "_id" : 6, "name" : "test6", "count" : 6 }
{ "_id" : 7, "name" : "test7", "count" : 7 }
{ "_id" : 8, "name" : "test8", "count" : 8 }
{ "_id" : 9, "name" : "test9", "count" : 9 }
{ "_id" : 10, "name" : "test10", "count" : 10 }
{ "_id" : 11, "name" : "test11", "count" : 11 }
{ "_id" : 12, "name" : "test12", "count" : 12 }
{ "_id" : 13, "name" : "test13", "count" : 13 }
{ "_id" : 14, "name" : "test14", "count" : 14 }
{ "_id" : 15, "name" : "test15", "count" : 15 }


2). update()

db.collection.update( criteria, objNew, upsert, multi )    四个参数的说明如下:
criteria: update的查询条件,类似sql update查询内where后面的
objNew: update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
upsert: 这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi: mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。

几个查询例子如下:

db.mytest.update({count:{$gt:1}},{$set:{name:"ok"}})                                  只更新第一条记录

db.mytest.update({count:{$gt:3}},{$set:{name:"ok"}},false,true)                  大于3的全部更新了

db.mytest.update({count:{$gt:4}},{$set:{name:"ok123"}},true,false)            只更新了一条

db.mytest.update({count:{$gt:6}},{$set:{name:"ok123"}},true,true)              大于6的全部更新了


3). save()

db.collection.save(x) x是要插入的对象,效果与上面的insert命令一样。save与insert的区别是这样的:

在进行插入数据的操作中,当遇到_id相同的情况下,save完成保存操作,insert则会保存;即_id相同情况下,save相当于更新操作。


下面是一些MongoDB的更新操作符


4). $inc

用法:{$inc:{field:value}}   意思是对一个数字字段field增加value:

[plain]  view plain copy
  1. > db.mytest.find({_id:1})       
  2. { "_id" : 1, "name" : "test1", "count" : 1 }  
  3. > db.mytest.update({_id:1},{$inc:{count:1}})  
  4. > db.mytest.find({_id:1})  
  5. { "_id" : 1, "name" : "test1", "count" : 2 }  //count字段加1  


value的值也可以为负,就相当于减一个值:

[plain]  view plain copy
  1. > db.mytest.update({_id:1},{$inc:{count:-2}})  
  2. > db.mytest.find({_id:1})  
  3. { "_id" : 1, "name" : "test1", "count" : 0 }  //值从2减到0  

5). $set命令
用法:{$set:{field:value}}

相当于在关系型数据库中sql的set field=value,全部数据类型都支持$set操作

[plain]  view plain copy
  1. > db.mytest.update({_id:1},{$set:{count:111}})  
  2. > db.mytest.find({_id:1})  
  3. { "_id" : 1, "name" : "test1", "count" : 111 }   //修改数值型  
  4. > db.mytest.update({_id:1},{$set:{name:"MongoDB"}})  
  5. > db.mytest.find({_id:1})  
  6. { "_id" : 1, "count" : 111, "name" : "MongoDB" }   //修改字符型  

6). $unset

用法:{$unset:{field:1}}

[plain]  view plain copy
  1. > db.mytest.find({_id:1})  
  2. { "_id" : 1, "count" : 111, "name" : "MongoDB" }  
  3. > db.mytest.update({_id:1},{$unset:{name:1}})  
  4. > db.mytest.find({_id:1})  
  5. { "_id" : 1, "count" : 111 }  //删除了字段name  

7). $push

用法:{$push:{field:value}}

把value追加到field中取,field一定是数据类型才行,如果field不存在,会新增一个数组类型加进去:

[plain]  view plain copy
  1. > db.mytest.update({_id:15},{$set:{array:["aaa","bbb"]}})  
  2. > db.mytest.find({_id:15})  
  3. { "_id" : 15, "array" : [  "aaa",  "bbb" ], "count" : 15, "name" : "ok123" }  
使用push追加数据:

[plain]  view plain copy
  1. > db.mytest.update({_id:15},{$push:{array:"ccc"}})  
  2. > db.mytest.find({_id:15})  
  3. { "_id" : 15, "array" : [  "aaa",  "bbb",  "ccc" ], "count" : 15, "name" : "ok123" }  
push一次只能追加一个值,如果需要追加多个值,则需要使用 $pushAll:
[plain]  view plain copy
  1. > db.mytest.update({_id:15},{$pushAll:{array:["ddd","eee","fff"]}})  
  2. > db.mytest.find({_id:15})  
  3. { "_id" : 15, "array" : [  "aaa",  "bbb",  "ccc",  "ddd",  "eee",  "fff" ], "count" : 15, "name" : "ok123" }  

8). $addToSet

用法:{$addToSet:{field:value}}

增加一个值到数组内,而且只有当这个值不在数组内才增加:

[plain]  view plain copy
  1. > db.mytest.update({_id:15},{$addToSet:{array:"123"}})  
  2. > db.mytest.find({_id:15})  
  3. { "_id" : 15, "array" : [  "aaa",  "bbb",  "123" ], "array2" : [  "mmm",  "nnn"], "count" : 15, "name" : "ok123" }  
  4. > db.mytest.update({_id:15},{$addToSet:{array:"aaa"}})  
  5. > db.mytest.find({_id:15})  
  6. { "_id" : 15, "array" : [  "aaa",  "bbb",  "123" ], "array2" : [  "mmm",  "nnn"], "count" : 15, "name" : "ok123" }  

9). $pop

删除数组内的一个值,删除最后一个值:{$pop:{field:1}} ,删除第一个值:{$pop:{field:-1}}

[plain]  view plain copy
  1. > db.mytest.find({_id:15})  
  2. { "_id" : 15, "array" : [  "aaa",  "bbb",  "123" ], "array2" : [  "mmm",  "nnn"], "count" : 15, "name" : "ok123" }  
  3. > db.mytest.update({_id:15},{$pop:{array:1}})  
  4. > db.mytest.find({_id:15})  
  5. { "_id" : 15, "array" : [  "aaa",  "bbb" ], "array2" : [  "mmm",  "nnn" ], "count" : 15, "name" : "ok123" }  

10). $pull

用法:$pull:{field:value}   从数组中删除一个等于value的值:

[plain]  view plain copy
  1. > db.mytest.find({_id:15})  
  2. { "_id" : 15, "array" : [  "aaa",  "bbb" ], "array2" : [  "mmm",  "nnn" ], "coun  
  3. t" : 15, "name" : "ok123" }  
  4. > db.mytest.update({_id:15},{$pull:{array:"aaa"}})  
  5. > db.mytest.find({_id:15})  
  6. { "_id" : 15, "array" : [  "bbb" ], "array2" : [  "mmm",  "nnn" ], "count" : 15,  
  7.  "name" : "ok123" }  

11). $pullAll

用法同$pull,可以一次删除数组内的多个值:

[plain]  view plain copy
  1. > db.mytest.find({_id:15})  
  2. { "_id" : 15, "array" : [  "bbb" ], "array2" : [  "mmm",  "nnn" ], "count" : 15,"name" : "ok123" }  
  3. > db.mytest.update({_id:15},{$pullAll:{array2:["mmm","nnn"]}})  
  4. > db.mytest.find({_id:15})  
  5. { "_id" : 15, "array" : [  "bbb" ], "array2" : [ ], "count" : 15, "name" : "ok123" }  

12). $

可以理解为数组定位器,看一个官方文档的例子:

[plain]  view plain copy
  1. > t.find()  
  2. { "_id" : ObjectId("4b97e62bf1d8c7152c9ccb74"), "title" : "ABC", "comments" : [ { "by" : "joe", "votes" : 3 }, { "by" : "jane", "votes" : 7 } ] }  
  3. > t.update( {'comments.by':'joe'}, {$inc:{'comments.$.votes':1}})  
  4. > t.find()  
  5. { "_id" : ObjectId("4b97e62bf1d8c7152c9ccb74"), "title" : "ABC", "comments" : [ { "by" : "joe", "votes" : 4 }, { "by" : "jane", "votes" : 7 } ] }  

需要注意的是,$只会找到第一条数组项,后面的就不管了:

[plain]  view plain copy
  1. > db.mytest.find({_id:16})  
  2. { "_id" : 16, "x" : [  1,  2,  3,  1 ] }  
  3. > db.mytest.update({x:1},{$inc:{"x.$":1}})  
  4. > db.mytest.find({_id:16})  
  5. { "_id" : 16, "x" : [  2,  2,  3,  1 ] }  


还有一点需要注意,当$配合$unset使用的时候,会留下一个null的数组项,这个问题可以使用{$pull:{x:null}}解决:

[plain]  view plain copy
  1. > db.mytest.find({_id:16})  
  2. { "_id" : 16, "x" : [  2,  2,  3,  1 ] }  
  3. > db.mytest.update({x:3},{$unset:{"x.$":1}})  
  4. > db.mytest.find({_id:16})  
  5. { "_id" : 16, "x" : [  2,  2,  null,  1 ] }  
  6. > db.mytest.update({_id:16},{$pull:{x:null}})  
  7. > db.mytest.find({_id:16})  
  8. { "_id" : 16, "x" : [  2,  2,  1 ] }  
原文地址:点击打开链接
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要修改MongoDB中的数据,您可以使用update()方法。update()方法允许您指定修改的文档的条件以及要进行的更新操作。 以下是一些常见的更新操作示例: 1. 更新一个字段的值 假设您有一个名为“users”的集合,其中包含名为“John”的用户文档,您可以使用以下代码将其电子邮件地址从“john@example.com”更改为“john@newexample.com”: ``` db.users.update( { name: "John" }, { $set: { email: "john@newexample.com" } } ) ``` 2. 更新多个字段的值 您可以使用相同的“$set”操作符将多个字段的值更新为文档: ``` db.users.update( { name: "John" }, { $set: { email: "john@newexample.com", age: 30, location: "New York" } } ) ``` 3. 增加一个字段的值 您可以使用“$set”操作符来增加一个新的字段,如下所示: ``` db.users.update( { name: "John" }, { $set: { "address.city": "New York" } } ) ``` 在上面的示例中,“address”是一个嵌套的文档,您可以使用点符号访问它的子字段。 4. 删除一个字段 要删除一个字段,您可以使用“$unset”操作符: ``` db.users.update( { name: "John" }, { $unset: { email: 1 } } ) ``` 在上面的示例中,“email”字段将从文档中删除。 请注意,这些操作都只会修改符合指定条件的第一条文档。如果您需要更新多个文档,请使用updateMany()方法。 ### 回答2: 以MongoDB中文档的方式存储数据是一种常见的方法。修改MongoDB中的数据可以通过使用update或updateMany方法来实现。 1. 使用update方法: - 首先,选择你想要修改数据的集合(collection)。 - 然后,确定你希望修改的文档(document),并使用条件(criteria)来定位该文档。例如,你可以使用_id字段来定位唯一文档。 - 最后,指定你想要修改数据字段,并提供要进行修改的新值。 - 示例代码如下: ``` db.collectionName.update( { _id: ObjectId("文档ID") }, { $set: { 字段名: 新值 } } ) ``` 2. 使用updateMany方法: - 当你希望修改多个文档时,可以使用updateMany方法。和update方法类似,你需要选择集合,并使用条件定位需要修改的文档。 - 示例代码如下: ``` db.collectionName.updateMany( { 条件 }, { $set: { 字段名: 新值 } } ) ``` 需要注意的是,MongoDB中的修改操作是原子性的,即要么所有的修改都会被应用,要么都不会被应用。此外,你还可以使用其他操作符(如$inc、$push等)来修改文档中的数据总结MongoDB中使用update或updateMany方法来修改数据。你需要选择集合,并使用条件定位需要修改的文档。然后,指定要修改数据字段和新值。注意,修改操作是原子性的,且你可以使用其他操作符来修改数据。 ### 回答3: MongoDB是一款非关系型数据库管理系统,具有丰富的功能和灵活的数据操作方式。要修改MongoDB中的数据,可以通过以下几个步骤: 1. 连接到MongoDB数据库:使用MongoDB提供的连接方法,连接到目标数据库服务器。可以使用MongoDB的默认端口号(27017)以及数据库的连接字符串。 2. 选择要修改数据集合:在连接成功后,选择要修改数据集合(类似于关系型数据库中的表)。可以使用MongoDB的db.collection()方法指定集合名称,并将其赋给一个变量。 3. 查询要修改数据:使用find()方法查询满足修改条件的数据。可以使用查询条件,如字段相等、大于或小于等,来过滤出需要修改数据。该方法返回一个游标,可以通过遍历来获取数据。 4. 修改数据:对查询到的数据进行修改。可以使用update()方法来更新数据。此方法接收两个参数,第一个参数是查询条件,用于指定要修改哪些数据;第二个参数是要修改的值,用于指定修改后的新值。 5. 执行修改操作:保存对数据修改。通过调用update()方法,将修改后的数据保存到数据库中。可以设置多个选项:如是否批量修改、是否插入新数据等。 6. 检查修改结果:可以通过方法的返回值来检查修改是否成功。根据返回的结果,可以判断是否需要进一步处理。 7. 关闭数据库连接:最后,使用close()方法关闭数据库连接,释放资源。 以上就是使用MongoDB修改数据的基本过程。需要注意的是,MongoDB数据修改操作相对灵活,可以直接修改字段的值,也可以添加新的字段。而且,由于MongoDB不需要像关系型数据库那样预先定义表结构,可以根据需要动态修改数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值