下面重新插入一条数据,并且改变这条数据的键的名称
db.user.insert({name:'chenjiabing','age':22,'sex':'Man','school':{'name':'jsnu','city':'beijing'}}); db.user.update({name:'chenjiabing'},{$rename:{'age':'Age'}}) //重命名age为Age
下面将要演示怎样改变内嵌文档的键的名称,注意一定要带上文档的名字
db.user.update({name:'chenjiabing'},{$rename:{'school.name':'school.Name','school.city':'school.City'}});
如果重命名的字段字和集合中原有的字段名字相同的话就会覆盖原有的字段名称,那么就会造成数据的丢失
db.user.update({name:'chenjiabing'},{'$rename':{'sex','age'}}); //这里sex变成age和原来的age相同,那么原来的age就会丢失 db.user.find({name:'chenjiabing'}); //输出,可以看到原来的age没有了,变成了覆盖之后的 { "_id" : ObjectId("590674ce30b9f88dd43d7ee4"), "name" : "chenjiabing", "age" : "Man", "school" : { "name" : "jsnu", "city" : "beijing" } }
如果指定的字段不存在,那么将不会更新,对原来的字段没有影响
db.user.update({name:'chenjiabing'},{$rename:{value:'name'}}); //将不会有任何的改变,因为value这个字段根本不存在
$rename
操作符也可以将子文档中键值移到其他子文档中
db.user.update({name:'chenjiabing'},{$rename:{'school.name':'contact.name'}});// 这里将会将school.name这个字段的值移到contact.name之中,如果contact不存在,那么就会创建一个 //输出 { "_id" : ObjectId("590674ce30b9f88dd43d7ee4"), "name" : "chenjiabing", "age" : "Man", "school" : { "city" : "beijing" }, "contact" : { "name" : "jsnu" } }
数组更新操作符 Array Update Operators
只能用在键值为数组的键上的数组操作。
$ (query)
语法: { "<array>.$" : value }
当对数组字段进行更新时,且没有明确指定的元素在数组中的位置,我们使用定位操作符$标识一个元素,数字都是以0开始的。
注意:
- 定位操作符(“$”)作为第一个匹配查询条件的元素的占位符,也就是在数组中的索引值。
- 数组字段必须出现查询文档中。
向集合中插入两条数据
db.students.insert({ "_id" : 1, "grades" : [ 78, 88, 88 ] }); db.students.insert({ "_id" : 2, "grades" : [ 88, 90, 92 ] });
执行下列操作
//查询匹配的文档中,数组有2个88,只更新第一个匹配的元素,也就是"grades.1" db.students.update( { _id: 1, grades: 88 }, { $set: { "grades.$" : 82 } }) ; //查询文档中没有出现grades字段,查询报错 db.students.update( { _id: 2 }, { $set: { "grades.$" : 82 } } );
$push
如果指定的键已经存在,会向已有的数组末尾加入一个元素,要是没有就会创建一个新的数组。
下面我们将使用$push
对该文档添加一条评论信息。
//将会创建一个comments数组,因为一开始这个数组没有存在 db.user.update({name:'chenjiabing'},{$push:{comments:{'name':'jack','content':'hello thanks'}}}) //继续添加一条,在comments的末尾进行添加,此时comments变成两条数据了 db.user.update({name:'chenjiabing'},{$push:{comments:{'name':'john','content':'hello'}}})
$pull
语法:db.collection.update( { field: <query> }, { $pull: { field: <query> } } );
$pull
操作符移除指定字段值为数组,且匹配$pull操作符移除指定字段值为数组,且匹配$pull语句声明的查询条件的所有元素。
执行如下操作
//插入一条文档 db.profiles.insert({ votes: [ 3, 5, 6, 7, 7, 8 ] }); //移除数组中所有元素7 db.profiles.update( { votes: 3 }, { $pull: { votes: 7 } } ); //移除数组中所有大于6的元素 db.profiles.update( { votes: 3 }, { $pull: { votes: { $gt: 6 } } } ); //Result { votes: [ 3, 5, 6, 8 ] } { votes: [ 3, 5, 6 ] }
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。