Mongodb增删改

首先构造一些数据

1 db.student.insert({
2     name:'hunter',
3     courses:[{  name:'英语',   classRoom:'1001'},{  name:'高等数学',   classRoom:'1001'}]
4 })

 1、新增操作,往courses新增一个课程

db.student.update({name:'hunter'},{ $addToSet: {courses:{ name:'复变函数',  classRoom:'1002'} } })

 重复执行一下以上指令,发现并没有再新增一个课程,相同的数据只写入一次。

 那么要插入重复元素怎么处理,用关键字$push替代$addToSet,其他的不变,执行完后,可以发现,数据里有两门一样的复变函数课程。

db.student.update({name:'hunter'},{ $push: {courses:{ name:'复变函数',  classRoom:'1002'} } })

 2、删除操作

下面来看看把复变函数这门课程进行删除

使用$pull

db.student.update({name:'hunter'},{ $pull: {courses:{ name:'复变函数',  classRoom:'1002'} } })

执行完之后,会发现,关于复变函数的两条记录均被删除了,$pull会把匹配的数据全部删除。

使用$pop操作符,该使用场景应该还是比较少的

db.student.update({name:'hunter'},{ $pop: {courses:1 } })

该操作会把在数组的最后一个元素进行删除,如果把1修改成-1,那么删除的数组的第一个元素。

3、修改操作

db.student.update({name:'hunter','courses.name':'英语'},{ $set: {'courses.$.classRoom':'1008'} })

$set操作符执行后,如果记录匹配到多条,用$只进行了第一个元素的更改,需要多条修改那么用$[],如果指定下标修改,那么把$修改为元素的下标即可,索引从0开始,update修改也只是修改匹配的第一条记录,如果要多条,使用updateMany()或者options设置为multi:true;

 4、查询

假设当前数据是这样的。

1

{name:'hunter',courses:[{  name:'英语',   classRoom:'1001'},{  name:'复变函数',   classRoom:'1001'}]

1

{name:'tom',courses:[{  name:'英语',   classRoom:'1001'},{  name:'复变函数',   classRoom:'1002'}]

这个查询全部的记录都会查出来。

1

db.student.find({'courses.classRoom':'1001','courses.name':'复变函数'})

严格匹配查询,这样只有hunter的记录能查询出来。

//匹配出正确的文档

db.student.find({'courses':{$elemMatch:{'classRoom':'1001','name':'复变函数'}}})
//这个是匹配出正确的文档后,再筛选指定的数据,find的第二个参数是个project,虽然与查询参数是一样的,作用倒是不同。

db.student.find({'courses':{$elemMatch:{'classRoom':'1001','name':'复变函数'}}},{'courses':{$elemMatch:{'cla
ssRoom':'1001','name':'复变函数'}}})

原文地址:https://www.cnblogs.com/hunter2014/p/9018967.html 

 

zs---修改code值为default的数据,没有则新增,此修改会覆盖原来的值,没有的字段将移除

推荐 https://www.cnblogs.com/jokerjason/p/7552667.html

db.switch_properties.update({"code":"default"}, 
{
	code : "default",
	items : [
        {
            bean_name : "userRecall", 
            sn : NumberInt(1)
        }, 
        {
            bean_name : "randomSort", 
            sn : NumberInt(2)
        }
    ], 
	backup_items : [
        {
            bean_name : "dayPvRecall", 
            sn : NumberInt(1), 
            params : "maxSize:200"
        }, 
        {
            bean_name : "randomSort", 
            sn : NumberInt(2)
        }
    ], 
	group_items : [
        {
            bean_name : "genderFilter", 
            sn : NumberInt(1)
        }, 
        {
            bean_name : "userReadHistoryFilter", 
            sn : NumberInt(2)
        }, 
        {
            bean_name : "bookGroupFilter", 
            sn : NumberInt(3), 
            params : "QINGOO,CP"
        }, 
        {
            bean_name : "freeBookFilter", 
            sn : NumberInt(4)
        }, 
        {
            bean_name : "bookBreakFilter", 
            sn : NumberInt(5), 
            params : "formula:$1 = 'QINGOO' & $2 > 3"
        }, 
        {
            bean_name : "bookRankFilter", 
            sn : NumberInt(6), 
            params : "formula:$1 = 'QINGOO' & $2 = 'F',rank:S#@A+#@A-"
        }, 
        {
            bean_name : "bookWordsFilter", 
            sn : NumberInt(7), 
            params : "formula:$1 = 'CP' & $2 = 'N' & $3 = 'F' & $4 < 600000"
        }, 
        {
            bean_name : "bookWordsFilter", 
            sn : NumberInt(8), 
            params : "formula:$1 = 'CP' & $2 = 'N' & $3 = 'S' & $4 < 300000"
        }
    ], 
    "cache_key" : "#udid,#code", 
    "cache_time" : "M5", 
    "expectedSize" : NumberInt(4), 
    "status" : NumberInt(1)
},{upsert:true})

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值