mongoDB3-增删改

10 篇文章 0 订阅

1.插入

1.1 insert

db.[documentName].insert({})

db.orderInfo.insert({"orderId":"201712251002","orderName":"测试订单"});
//指定_id添加(注意:是ObjectId())
db.orderInfo.insert({"_id":ObjectId("5a40a179923ea32829f21b37"),"orderName":"测试订单3"})

//如果插入重复id报如下错误:

E11000 duplicate key error collection: afdata.orderInfo index: _id_ dup key: { : ObjectId('5a40a179923ea32829f21b37') }

1.2 save

db.[documentName].save({})

db.orderInfo.save({"_id":ObjectId("5a40a179923ea32829f21b37"),"orderName":"测试订单3"})

1.3 区别

save操作和insert操作区别在于当遇到_id相同的情况下:
save完成保存操作并覆盖之前数据,insert则会报错.

注意:shell都不支持批量操作.

1.4 pretty()

可以格式化结果,固定集合

2.删除

2.1 drop

删除整个集合
db.collection.drop();//删除集合

2.2 remove

//删除所有数据
db.[documentName].remove()
//指定条件删除数据
db.[documentName].remove({})

db.orderInfo.remove({"_id":"5a40a179923ea32829f21b371"})

2.3 注意

如果删一个数据量十分庞大的集合;直接删除该集合并且重新建立索引的办法,比直接用remove的效率和高很多

3.修改

3.1 替换式更新

db.[documentName].update({criteria},{objNew}},upsert, multi );

  • criteria(查询器) : update的查询条件,类似sql update查询内where后面的
  • objNew(修改器): update的对象和一些更新的操作符(如 , inc…)等,也可以理解为sql update查询内set后面的
  • upsert : 默认是false:只修改不插入;如果为true则代表insertOrUpdate,即如果不存在update的记录,则插入.
  • multi : 默认是false:只更新找到的第一条记录;如果这个参数为true,就把按条件查出来多条记录全部更新。

3.2 修改器详解:

修改器文章链接

3.2.1 基础

修改器名称 说明 语法 举例
set|键值对操作|{set:{field: value}} $inc 数字类型加减 $unset 删除指定键 $push 追加/创建数组(一条或多条) $pushAll v3.6中已取消 $addToSet 添加数组和each配合使用 $pop 弹出数组中的首或者尾 $pull 取出数组中指定一个数据 $pullAll 取出数组中指定一批数据

3.2.2 $set

指定一个键值对,如果存在键就进行修改不存在则进行添加
{$set:{field: value}}

//修改新增加入amount
db.orderInfo.update({"orderId":"201712251003"},{"$set":{"amount":100}}) 
db.orderInfo.update({"orderId":"201712251003"},{"$set":{"number":20}}) 
db.orderInfo.update( {"orderId":"201712251003"},{"$set":{"desc":"备注"}}) 

3.2.3 $inc

只是使用与数字类型(可以为小数),他可以为指定的键对应的数字类型的数值进行加减操作.

db.orderInfo.update({"orderId":"201712251003"},{"$inc":{"amount":2}}) 
db.orderInfo.update({"orderId":"201712251003"},{"$inc":{"amount":-3.22}}) 

3.2.4 $unset

删除指定的键

//删除指定的键
db.orderInfo.update( {"orderId":"201712251003"},{"$set":{"number":"数目"}}) 

用修改器$unset时,不论对目标键使用1、0、-1或者具体的字符串等都是可以删除该目标键

3.2.5 $push

数组中添加单条数据:
1.如果指定的键是数组增追加新的数值
2.如果指定的键不是数组则中断当前操作Cannot apply push/ pushAll modifier to non-array
3.如果不存在指定的键则创建数组类型的键值对

//如果没有数组则会自动创建
db.orderInfo.update( {"orderId":"201712251003"},{"$push":{"comments":{"name":"joe","conment":"nice"}}}) 
db.orderInfo.update( {"orderId":"201712251003"},{"$push":{"comments":{"name":"bob","conment":"good"}}}) 

//执行的结果该documenet为
{
    "_id" : ObjectId("5a40af6e923ea32829f21b38"),
    "orderId" : "201712251003",
    "orderName" : "测试订单3",
    "amount" : 98.78,
    "desc" : "备注",
    "comments" : [ 
        {
            "name" : "joe", 
            "conment" : "nice"
        }, 
        {
            "name" : "bob",
            "conment" : "good"
        }
    ]
}

//也可以直接添加数组
db.orderInfo.update({"orderId":"201712251003"},{"$push":{"commentsNew":["comment1","comment2","comment3"]}} ) 
//操作后查看结果:
 "commentsNew" : [ 
        [ 
            "comment1", 
            "comment2", 
            "comment3"
        ]
    ]

//添加数组中的对象:
db.orderInfo.update({"orderId":"201712251003"},{"$push":{"commentsNew2":[
     {"name" : "bob21", "conment" : "nice again"},
     {"name" : "bob22", "conment" : "good again"}
    ]}} ) 

//执行的结果该documenet为
 "commentsNew2" : [ 
        [ 
            {
                "name" : "bob21",
                "conment" : "nice again"
            }, 
            {
                "name" : "bob22",
                "conment" : "good again"
            }
        ]
    ] 

3.2.6 $pushAll

用法和$push相似,添加数组数据.注:在3.6版本中查看已经取消了.
官方操作链接

3.2.7 $addToSet

目标数组存在此项则不操作,不存在此项则加进去

//数组字符串
db.orderInfo.update({"orderId":"201712251003"},{"$addToSet":{"goosNames2":{"$each":["javabook","springbook","redisbook","mongodbbook","springbootbook","mybatisbook"]}}})
//数组对象
db.orderInfo.update({"orderId":"201712251003"},{"$addToSet":{"commentsNew3":{"$each":[ {"name" : "bob31", "conment" : "nice again 3"},{"name" : "bob32", "conment" : "good again3"}]}}})


执行的结果该documenet为
  "commentsNew3" : [ 
        {
            "name" : "bob31",
            "conment" : "nice again 3"
        }, 
        {
            "name" : "bob32",
            "conment" : "good again3"
        }
    ]

3.2.8 $pop

从指定数组删除一个值1删除最后一个数值,-1删除第一个数值

//1删除数组中的最后一条数据
db.orderInfo.update({orderId:"201712251003"},{$pop:{commentsNew3:1}})

//-1删除数组中的第一条数据
db.orderInfo.update({orderId:"201712251003"},{$pop:{commentsNew3:-1}}

3.2.9 $pull

删除一个数组中指定的数据

//删除数组中的指定数据
db.orderInfo.update({orderId:"201712251003"},{$pull:{goosNames:"javabook"}})
//将数组值goosNames中的javabook删掉

//如果和puallAll一样写删除多个,执行不报错,但是没有删除成功
db.orderInfo.update({orderId:"201712251003"},{"$pull":{goosNames:["mongodbbook","mybatisbook"]}})

3.2.10 $pullAll

一次性删除多个指定的数值

//删除数组中的指定多个数据
db.orderInfo.update({orderId:"201712251003"},{"$pullAll":{goosNames:["springbook","redisbook"]}})

3.2.11 $

参考 数组定位器链接
1.数组定位器,如果数组有多个数值我们只想对其中一部分进行操作我们就要用到定位器()  
例子:  
例如有文档{name:”YFC”,age:27,books:[{type:’JS’,name:”EXTJS4”},{type:”JS”,name:”JQUERY”},{type:”DB”,name:”MONGODB”}]}  
我们要把type等于JS的文档增加一个相同的作者author是USPCAT  
办法:  
db.text.update({“books.type”:”JS”},{
set:{"books.$.author”:”USPCAT”}})

3.3 runCommand

参考 mongodb-findAndModify

runCommand可以执行mongoDB中的特殊函数
findAndModify就是特殊函数之一他的用于是返回update或remove后的文档.

//语法
  runCommand({“findAndModify”:”processes”,
    query:{查询器},
    sort{排序},
     new:true
    update:{更新器},
    remove:true
   }).value

//示例:
ps = db.runCommand({
  "findAndModify":"persons",
  "query":{"name":"text"},
  "update":{"$set":{"email":"1221"}},
  "new":true 
}).value

do_something(ps)

参考文章:

数据操作官方文档

MongoDB快速入门

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值