mongodb-更新操作符

更新操作符

1. $set 修改字段

更新字段值。

也可以改变字段值的类型。若字段不存在,则自动创建。

1.1. 字段存在:更新字段值

字段存在,更新字段值

db.collection.update({},{"$set":{"operateDate":"2015-07-07"}})

处理前

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2,

    "operateDate" : "2015-04-16",

}

处理后

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2,

    "operateDate" : "2015-07-07",

}

1.2. 字段不存在:创建字段并赋值

字段不存在,创建字段并赋值

db.collection.update({},{"$set":{"flag":"001"}})

处理前

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2,

    "operateDate" : "2015-04-16"

}

处理后

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2,

    "operateDate" : "2015-04-16",

    "flag" : "001"

}

1.3. 修改字段类型

赋值的过程中可以修改字段类型

db.collection.update({},{"$set":{"operateDate":20150707}})

处理前

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2,

"operateDate" : "2015-04-16"

}

处理后

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2,

"operateDate" : 20150707

}

1.4. 修改字段内嵌文档

对于字段内文档使用"."符号连接多集字段。

使用"."符号连接多集字段

db.collection.update({},{"$set":{"indoor.open":99}})

处理前

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2,

    "indoor" : {

        "open" : 1,

        "floor" : null

    }

}

处理后

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2,

    "indoor" : {

        "open" : 99,

        "floor" : null

    }

}

1.5. 修改多组值中的指定组

当指定字段存在多组值时,通过数字来确定指定组。0表示第一组。

使用"."符号连接多集字段

db.collection.update({},{"$set":{"brands.0.name":"中国脑残"}})

处理前

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2,

    "brands" : [

        {

            "code" : "6401",

            "name" : "中国移动"

        }

]

}

处理后

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2,

    "brands" : [

        {

            "code" : "6401",

            "name" : "中国脑残"

        }

    ]

}

 

使用"."符号连接多集字段

db.collection.update({},{"$set":{"brands.1.name":"中国脑残"}})

处理前

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2,

    "brands" : [

        {

            "code" : "6401",

            "name" : "中国移动"

        },

        {

            "code" : "6402",

            "name" : "中国联通"

        },

        {

            "code" : "6403",

            "name" : "中国电信"

        }

    ]

}

处理后

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2,

    "brands" : [

        {

            "code" : "6401",

            "name" : "中国移动"

        },

        {

            "code" : "6402",

            "name" : "中国脑残"

        },

        {

            "code" : "6403",

            "name" : "中国电信"

        }

]

}

2. $unset 删除字段

删除字段。

指定字段”:”后跟随的值可以是任何数字及字符串,并无实际意义。

2.1. 删除指定字段

db.collection.update({},{"$unset":{"operateDate":1}})

处理前

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2,

    "operateDate" : "2015-04-16"

}

处理后

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2

}

2.2. 删掉多级字段的子字段

db.collection.update({},{"$unset":{"indoor.open":1}})

处理前

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2,

    "indoor" : {

        "open" : 1,

        "floor" : null

    }

}

处理后

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2,

    "indoor" : {

        "floor" : null

    }

}

2.3. 删掉多组值中的指定组

删除指定组内的指定字段

db.collection.update({},{"$unset":{"brands.0.name":1}})

处理前

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2,

    "brands" : [

        {

            "code" : "6401",

            "name" : "中国移动"

        }

]

}

处理后

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2,

    "brands" : [

        {

            "code" : "6401"

        }

    ]

}

 

删除指定组,将该组中的内容置为null

db.collection.update({},{"$unset":{"brands.0":1}})

处理前

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2,

    "brands" : [

        {

            "code" : "6401",

            "name" : "中国移动"

        },

        {

            "code" : "6402",

            "name" : "中国联通"

        },

        {

            "code" : "6403",

            "name" : "中国电信"

        }

    ]

}

处理后

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2,

    "brands" : [

        null,

        {

            "code" : "6402",

            "name" : "中国联通"

        },

        {

            "code" : "6403",

            "name" : "中国电信"

        }

    ]

}

3. $rename 修改字段

修改字段名。

可以同时修改多个字段名。

db.collection.update({},{$rename:{"operateDate":"D","chargingPole":"P"}})

处理前

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2,

"operateDate" : "2015-04-16",

" chargingPole " : []

}

处理后

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2,

    "D" : "2015-04-16",

    "P" : []

}

4. $push 追加字段值

添加字段及其字段值。

当字段存在时,增加字段值。

需要注意的是新增的字段对应的字段值以list的形式出现。且不会对list中的值去重。

4.1. 字段存在:追加字段值

只能对字段值为list的字段追加字段值。

如例子中不可对字段” operateDate”赋值,错误提示如下:

The field 'operateDate' must be an arraybut is of type String in document {_id: ObjectId('55309f113769e949a093d590')}

字段存在:追加字段值

db.collection.update({},{"$push":{"chargingPole":"K"}})

处理前

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2,

    "operateDate" : "2015-04-16",

    "chargingPole" : [

        "F"

    ]

}

处理后

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2,

    "operateDate" : "2015-04-16",

    "chargingPole" : [

        "F",

        "K"

    ]

}

 

追加字段值时不会考虑去重。

字段存在:字段值存在,追加字段值

db.collection.update({},{"$push":{"chargingPole":"K"}})

处理前

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2,

    "operateDate" : "2015-04-16",

    "chargingPole" : [

        "F",

        "K"

]

}

处理后

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2,

    "operateDate" : "2015-04-16",

    "chargingPole" : [

        "F",

        "K",

        "K"

    ]

}

4.2. 字段不存在:创建字段并赋值

新增的字段对应的字段值以list的形式出现。

字段不存在:创建字段并赋值

db.collection.update({},{"$push":{"level":1}})

处理前

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2,

    "operateDate" : "2015-04-16",

    "chargingPole" : []

}

处理后

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2,

    "operateDate" : "2015-04-16",

    "chargingPole" : [],

    "level" : [

        1

    ]

}

5. $pushAll 追加字段值

不同于$push,$pullAll可以一次追加到数组内多个值。

追加多个字段值

db.collection.update({},{"$pushAll":{"chargingPole":["F","K"]}})

处理前

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2,

    "operateDate" : "2015-04-16",

    "chargingPole" : []

}

处理后

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2,

    "operateDate" : "2015-04-16",

    "chargingPole" : [

        "F",

        "K"

    ]

}

6. $addToSet 追加字段值

增加一个值到list,当且仅当这个值不在list内。

由于$push在追加值时不考虑是否和现有的值重复。所以为了避免字段内的值重复。修改器$addToSet在$push基础上考虑了去重问题。

字段值存在:不追加

db.collection.update({},{"$addToSet":{"chargingPole":"K"}})

处理前

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2,

    "operateDate" : "2015-04-16",

    "chargingPole" : [

        "F",

        "K"

    ]

}

处理后

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2,

    "operateDate" : "2015-04-16",

    "chargingPole" : [

        "F",

        "K"

    ]

}

 

字段值不存在:追加

db.collection.update({},{"$addToSet":{"chargingPole":"Q"}})

处理前

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2,

    "operateDate" : "2015-04-16",

    "chargingPole" : [

        "F",

        "K"

    ]

}

处理后

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2,

    "operateDate" : "2015-04-16",

    "chargingPole" : [

        "F",

        "K",

        "Q"

    ]

}

7. $pull 删除字段值

删除指定字段的指定值。

删除指定字段值中所有(可以为多个)和指定字段相同的值。

当指定字段不存在时不报错。

删除指定字段的指定值

db.collection.update({},{"$pull":{"chargingPole":"K"}})

处理前

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2,

    "operateDate" : "2015-04-16",

    "chargingPole" : [

        "F",

        "K",

        "K"

    ]

}

处理后

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2,

    "operateDate" : "2015-04-16",

    "chargingPole" : [

        "F"

    ]

}

8. $pullAll 删除字段值

不同于$pull,$pullAll可以一次删除数组内多个值。

删除多个字段值

db.collection.update({},{"$pullAll":{"chargingPole":["F","K"]}})

处理前

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2,

    "operateDate" : "2015-04-16",

    "chargingPole" : [

        "F",

        "K",

        "K"

    ]

}

处理后

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2,

    "operateDate" : "2015-04-16",

    "chargingPole" : []

}

9. $pop 删除字段值

删除指定字段的值。

只能从list的头或者尾删除元素。

当字段值为零、整数、字符串时:0,1,100,”K”,会从末尾删除元素

当字段值为负数:-1,-100,会从开头删除元素

从未尾删除元素

db.collection.update({},{"$pop":{"chargingPole":1}})

处理前

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2,

    "operateDate" : "2015-04-16",

    "chargingPole" : [

        "A1",

        "A2",

        "A3",

        "A4",

        "A5"

    ]

}

处理后

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2,

    "operateDate" : "2015-04-16",

    "chargingPole" : [

        "A1",

        "A2",

        "A3",

        "A4"

]

}

 

从开头删除元素

db.collection.update({},{"$pop":{"chargingPole":-1}})

处理前

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2,

    "operateDate" : "2015-04-16",

    "chargingPole" : [

        "A1",

        "A2",

        "A3",

        "A4",

        "A5"

    ],

}

处理后

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2,

    "operateDate" : "2015-04-16",

    "chargingPole" : [

        "A2",

        "A3",

        "A4",

        "A5"

    ]

}

10. $inc 修改字段值

对字段的值增加指定值。当指定值为负数是相当于减法。只能修改数字类型。

db.collection.update({},{"$inc":{"indoor.open":3}})

处理前

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2,

    "indoor" : {

        "open" : 1,

        "floor" : null

    }

}

处理后

{

    "_id" : ObjectId("55309f113769e949a093d590"),

"id" : 2,

    "indoor" : {

        "open" : 4,

        "floor" : null

    }

}

 

db.collection.update({},{"$inc":{"indoor.open":-3}})

处理前

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2,

    "indoor" : {

        "open" : 1,

        "floor" : null

    }

}

处理后

{

    "_id" : ObjectId("55309f113769e949a093d590"),

    "id" : 2,

    "indoor" : {

        "open" : -2,

        "floor" : null

    }

}

 

 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值