MongoDB之数据更新(修改器)-创新互联

对M

成都创新互联始终坚持【策划先行,效果至上】的经营理念,通过多达10年累计超上千家客户的网站建设总结了一套系统有效的营销推广解决方案,现已广泛运用于各行各业的客户,其中包括:茶艺设计等企业,备受客户表扬。ongoDB数据库而言,数据的修改会牵扯到内容的变更,结构的变更(包含有数组)。所以在进行MongoDB设计的时候就提供有一系列修改器的应用。之前使用的“$set”就是一个修改器。
1、$inc:主要针对于一个数字字段,增加某个数字字段的数据内容:
语法:{"$inc":{"成员":"内容"}}
范例:将年龄为30岁的一个员工的薪水一律1000,年龄加1岁
> db.emp.update({"age":30},{"$inc":{"sal":-1000,"age":1}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"age":31}).pretty();
{
        "_id" : ObjectId("599108423268c8e84253be26"),
        "name" : "赵一",
        "sex" : "男",
        "age" : 31,
        "sal" : 8999,
        "loc" : "北京"
}
2、$set:进行内容的重新设置:
语法:{"$set":{"成员":"新内容"}}
范例:将年龄是30岁的某个人员的薪水修改为7999
> db.emp.update({"age":30},{"$set":{"sal":7999}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"age":30}).pretty();
{
        "_id" : ObjectId("599108423268c8e84253be29"),
        "name" : "李四",
        "sex" : "女",
        "age" : 30,
        "sal" : 7999,
        "loc" : "北京"
}
3、$unset:删除某个成员的内容:
语法:{"$unset":{"成员":1}}
范例:删除“孙三”的年龄和薪水信息
> db.emp.find({"name":"孙三"}).pretty()
{
        "_id" : ObjectId("599108423268c8e84253be28"),
        "name" : "孙三",
        "sex" : "男",
        "age" : 40,
        "sal" : 2000,
        "loc" : "深圳"
}
> db.emp.update({"name":"孙三"},{"$unset":{"age":1,"sal":1}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"孙三"}).pretty()
{
        "_id" : ObjectId("599108423268c8e84253be28"),
        "name" : "孙三",
        "sex" : "男",
        "loc" : "深圳"
}
4、$push:相当于将内容追加到指定的成员之中(基本上是数组):
语法:{"$push":{"成员":value}}
范例:向“孙三”添加2门课程信息(此时孙三信息下没有course信息)
> db.emp.update({"name":"孙三"},{"$push":{"course":["语文","数学"]}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"孙三"}).pretty()
{
        "_id" : ObjectId("599108423268c8e84253be28"),
        "name" : "孙三",
        "sex" : "男",
        "loc" : "深圳",
        "course" : [
                [
                        "语文",
                        "数学"
                ]
        ]
}
范例:向“李四”添加一门课程信息(此时李四信息下没有course信息)
> db.emp.update({"name":"李四"},{"$push":{"course":"语文"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"李四"}).pretty()
{
        "_id" : ObjectId("599108423268c8e84253be29"),
        "name" : "李四",
        "sex" : "女",
        "age" : 30,
        "sal" : 7999,
        "loc" : "北京",
        "course" : [
                "语文"
        ]
}
范例:向“刘A”的课程追加一个“美术”
> db.emp.find({"name":"刘A"}).pretty()
{
        "_id" : ObjectId("599129a00184ff511bf02b87"),
        "name" : "刘A",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京",
        "course" : [
                "语文",
                "数学",
                "英语",
                "音乐",
                "政治"
        ]
}
> db.emp.update({"name":"刘A"},{"$push":{"course":"美术"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"刘A"}).pretty()
{
        "_id" : ObjectId("599129a00184ff511bf02b87"),
        "name" : "刘A",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京",
        "course" : [
                "语文",
                "数学",
                "英语",
                "音乐",
                "政治",
                "美术"
        ]
}
就是进行数组数据的添加操作使用的。如果没有数组则进行新的数组的创建,如果有则进行内容的增加。
5、$pushAll:与“$push”是类似的,可以一次追加多个内容到数组里面:
语法:{"$pushAll":{"成员":数组内容}}
范例:向"周五"里面添加多个课程内容
> db.emp.find({"name":"周五"}).pretty()
{
        "_id" : ObjectId("599108423268c8e84253be2a"),
        "name" : "周五",
        "sex" : "女",
        "age" : 30,
        "sal" : 9999,
        "loc" : "北京"
}
> db.emp.update({"name":"周五"},{"$pushAll":{"course":["美术","音乐"]}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"周五"}).pretty()
{
        "_id" : ObjectId("599108423268c8e84253be2a"),
        "name" : "周五",
        "sex" : "女",
        "age" : 30,
        "sal" : 9999,
        "loc" : "北京",
        "course" : [
                "美术",
                "音乐"
        ]
}
6、$addToSet:向数组里面增加一个新的内容,只有这个内容不存在的时候才会增加
语法:{"$addToSet":{成员:内容}}
范例:向“周五”的信息增加新的内容
> db.emp.update({"name":"周五"},{"$addToSet":{"course":"舞蹈"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"周五"}).pretty()
{
        "_id" : ObjectId("599108423268c8e84253be2a"),
        "name" : "周五",
        "sex" : "女",
        "age" : 30,
        "sal" : 9999,
        "loc" : "北京",
        "course" : [
                "美术",
                "音乐",
                "舞蹈"
        ]
}
此时会判断要增加的内容在数组里面是否存在,如果不存在则向数组之中追加内容,如果存在则不做任何修改操作。
7、$pop:删除数组内的数据
语法:{"$pop":{成员:内容}},内容如果设置为-1表示删除第一个,如果内容设置为1表示删除最后一个
范例:删除周五的第一个课程
> db.emp.update({"name":"周五"},{"$pop":{"course":-1}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"周五"}).pretty()
{
        "_id" : ObjectId("599108423268c8e84253be2a"),
        "name" : "周五",
        "sex" : "女",
        "age" : 30,
        "sal" : 9999,
        "loc" : "北京",
        "course" : [
                "音乐",
                "舞蹈"
        ]
}
范例:删除周五的最后一个课程
> db.emp.update({"name":"周五"},{"$pop":{"course":1}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"周五"}).pretty()
{
        "_id" : ObjectId("599108423268c8e84253be2a"),
        "name" : "周五",
        "sex" : "女",
        "age" : 30,
        "sal" : 9999,
        "loc" : "北京",
        "course" : [
                "音乐"
        ]
}
8、$pull:从数组内删除一个指定内容的数据
语法:{"$pull":{成员:数据}},进行数据比对的,如果是此数据是删除
范例:删除王五的音乐课程信息
> db.emp.update({"name":"周五"},{"$pull":{"course":"音乐"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"周五"}).pretty()
{
        "_id" : ObjectId("599108423268c8e84253be2a"),
        "name" : "周五",
        "sex" : "女",
        "age" : 30,
        "sal" : 9999,
        "loc" : "北京",
        "course" : [ ]
}
9、$pullAll:一次性删除多个内容
语法:{"$pullAll":{成员:[数据,数据,...]}}
范例:删除“刘A”中的三门课程
> db.emp.find({"name":"刘A"}).pretty()
{
        "_id" : ObjectId("599129a00184ff511bf02b87"),
        "name" : "刘A",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京",
        "course" : [
                "语文",
                "数学",
                "英语",
                "音乐",
                "政治",
                "美术"
        ]
}
> db.emp.update({"name":"刘A"},{"$pullAll":{"course":["语文","数学","英语"]}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"刘A"}).pretty()
{
        "_id" : ObjectId("599129a00184ff511bf02b87"),
        "name" : "刘A",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京",
        "course" : [
                "音乐",
                "政治",
                "美术"
        ]
}
10、$rename:为成员名称重命名
语法:{"$rename":{旧的成员名称:新的成员名称}}
范例:将“孙三”的name成员名称修改为“姓名”
> db.emp.find({"name":"孙三"}).pretty()
{
        "_id" : ObjectId("599108423268c8e84253be28"),
        "name" : "孙三",
        "sex" : "男",
        "loc" : "深圳",
        "course" : [
                [
                        "语文",
                        "数学"
                ]
        ]
}
> db.emp.update({"name":"孙三"},{"$rename":{"name":"姓名"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"姓名":"孙三"}).pretty()
{
        "_id" : ObjectId("599108423268c8e84253be28"),
        "sex" : "男",
        "loc" : "深圳",
        "course" : [
                [
                        "语文",
                        "数学"
                ]
        ],
        "姓名" : "孙三"
}
在整个MongoDB数据库里面,提供的修改器的支持很全面。
分享标题:MongoDB之数据更新(修改器)-创新互联
文章网址:http://azwzsj.com/article/dggjso.html