我们可以修改列表里面元素的名字
例如:
修改age=34的数据,hobby里面的"足球"改为"网球"
> db.user.find({age:34}) { "_id" : ObjectId("5ca7a4c4219efd687462f968"), "id" : 4, "name" : "xiaogang", "age" : 34, "hobby" : [ "羽毛球", "篮球", "足球" ] }
第一种方法:
修改了,需要用到hobby.$
> db.user.updateOne({age:34,hobby:"足球"},{$set:{"hobby.$":"网球" } } ) { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 } > > db.user.find({age:34}) { "_id" : ObjectId("5ca7a4c4219efd687462f968"), "id" : 4, "name" : "xiaogang", "age" : 34, "hobby" : [ "羽毛球", "篮球", "网球" ] }
第二种方法:
我们也可以用这种方法,把hobby里面"网球"元素改为"足球"
利用这种方法找到列表的第二个元素,修改为足球
> db.user.find({age:34}) { "_id" : ObjectId("5ca7a4c4219efd687462f968"), "id" : 4, "name" : "xiaogang", "age" : 34, "hobby" : [ "羽毛球", "篮球", "网球" ] } > > > db.user.updateOne({age:34,hobby:"网球"},{$set:{"hobby.2":'足球' } } ) { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 } > db.user.find({age:34}) { "_id" : ObjectId("5ca7a4c4219efd687462f968"), "id" : 4, "name" : "xiaogang", "age" : 34, "hobby" : [ "羽毛球", "篮球", "足球" ] }
"$" 字符 代表 下标位置索引,类似于python的列表 list[1],list[2],存储 满足前置条件列表元素的下标索引
如果 是 一个很长很长很长的 Array列表 你要查找其中一个值,可以用第一种方法 : 下标使用 字符 "$" 代替数字
返回满足条件数据
> db.user.findOne({age:34,"hobby":"足球"}) { "_id" : ObjectId("5ca7a4c4219efd687462f968"), "id" : 4, "name" : "xiaogang", "age" : 34, "hobby" : [ "羽毛球", "篮球", "足球" ] }
如果我们使用update的话,满足条件的数据下标位置,就会传递到"$"字符中,在我们更新操作时,就相当于
对这个位置的元素 进行操作