mongodbupdate操作数组
在上⼀篇mongodb update操作符之常⽤字段更新操作符中详细介绍了常⽤的字段更新操作符,本篇开始介绍操作数组需要⽤到的操作符以及运算修饰符。在MongoDB的模式中,我们经常将⼀些数据存储到数组类型中,即我们常见的嵌套模式设计的⼀种实现⽅式。数组的这种设计实现⽅式在关系数据库中是不常见的。关于数组的操作可以分成两类,⼀类是数组操作符,另⼀个是数组运算修饰符。
1. 数组操作符
1.1. $push
说明:
将特定的元素或值添加到数组中。可以与
语法:
{ $push: { <field1>: <value1>, ... } }
注意:如果要更新的⽂档中没有该字段,则$push将该值作为元素添加到数组字段中。
如果字段不是数组,操作将失败。
如果值是⼀个数组,$push将整个数组作为单个元素追加。要分别添加值的每个元素,请使⽤$push修饰符$each。
1.1.1. ⽰例
1.1.1.1. 向数组添加⼀个值
初始化数据:
db.inventory.insertOne({ _id: 1, item: "polarizing_filter", tags: [ ] })
⽰例:向数组添加⼀个值
db.inventory.update( { _id: 1 }, {$push: { tags: "test" } } )
更改后查询:
返回结果:
{ _id: 1, item: 'polarizing_filter', tags: [ 'test' ] }
1.1.1.
2. 向数组添加多个值
⽰例:向数组添加多个值
db.inventory.update(
{ _id: 1},
{ $push: { tags: { $each: [ "test1", "test", "test2" ] } } }
)
更改后查询:
db.inventory.findOne({"_id":1})
返回结果:
{ _id: 1,
item: 'polarizing_filter',
tags: [ 'test', 'test1', 'test', 'test2' ] }
1.2. $addToSet
说明:
只向集合中不存在的元素添加数组元素,$addToSet不保证修改后的集合中元素的特定顺序,如果你在⼀个不是数组的字段上使⽤$addToSet,操作将会失败,如果值是⼀个数组,$addToSet将整个数组作为单个元素追加。
语法:
{ $addToSet: { <field1>: <value1>, ... } }
1.2.1. ⽰例
db.inventory.insertOne({ _id: 1, item: "polarizing_filter", tags: [ "electronics", "camera" ] })
注意:如果插⼊的值是在tags数组中已经存在,则不会插⼊。
1.2.1.1. 数组字段增加单个值
⽰例:追加accessories 值到tags数组字段中
db.inventory.update(
{ _id: 1 },
{ $addToSet: { tags: "accessories" } }
)
更改后查询:
db.inventory.findOne({"_id":1})
返回结果:
{ _id: 1,
item: 'polarizing_filter',
tags: [ 'electronics', 'camera', 'accessories' ] }
1.2.1.2. 数组字段增加多个值
⽰例:追加多个值到tags数组字段中
db.inventory.update(
{ _id: 1},
{ $addToSet: { tags: { $each: [ "test", "test1", "test2" ] } } }
)
db.inventory.findOne({"_id":1})
返回结果:
{ _id: 1,
item: 'polarizing_filter',
tags: [ 'electronics', 'camera', 'accessories' ] }
1.3. $pop
说明:
$pop操作符删除数组的第⼀个或最后⼀个元素。给$pop传递⼀个值-1来删除数组中的第⼀个元素,1来删除数组中的最后⼀个元素。
语法:
{ $pop: { <field>: <-1 | 1>, ... } }
注意:如果<field>不是数组,则$pop操作失败。
如果$pop操作符删除<field>中的最后⼀项,那么<field>将保存⼀个空数组。
1.3.1. ⽰例
初始化数据:
db.inventory.insertOne({ _id: 1, item: "polarizing_filter", tags: [ "electronics", "camera" ] })
注意:如果插⼊的值是在tags数组中已经存在,则不会插⼊。
1.3.1.1. 删除数组字段第⼀个元素值
⽰例:追加accessories 值到tags数组字段中
db.inventory.update( { _id: 1 }, { $pop: { tags: -1 } } )
更改后查询:
db.inventory.findOne({"_id":1})
返回结果:
{ _id: 1,
item: 'polarizing_filter',
tags: [ 'camera'] }
1.3.1.
2. 删除数组字段最后⼀个元素值
⽰例:追加多个值到tags数组字段中
db.inventory.update( { _id: 1 }, { $pop: { tags: 1 } } )
update语法大全更改后查询:
db.inventory.findOne({"_id":1})
返回结果:
{ _id: 1,
item: 'polarizing_filter',
tags: [ ] }
1.4. $pull
说明:
$pull操作符从现有数组中删除⼀个值或与指定条件匹配的值的所有数组元素。可以与$each、$position、$slice、$sort⼀起使⽤
语法:
{ $pull: { <field1>: <value|condition>, <field2>: <value|condition>, ... } }
{ $push: { <field1>: { <modifier1>: <value1>, ... }, ... } }
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论