mycode:

//example:

db.person.insert([
{name:'zs', books:[{name:'html', price:66}, {name:'js', price:88}], tags:['html', 'js']},
{name:'ls', books:[{name:'vue', price:99}, {name:'node', price:199}], tags:['vue', 'node']}
])

//在name为zs的字段中的tags增添一个vue

db.person.updateOne({name:'zs'},{$addToSet:{tags:'Vue'}})

//注意:如果操作的元素不存在,那么会自动新增,并且将操作的值赋值给新增字段

db.person.updateOne({name:'zs'},{$addToSet:{other:'123'}})

//注意:#addToSet会自动去重,如果添加的元素已经存在了,就不会添加

db.person.updateOne({name:'zs'},{$addToSet:{other:'123'}})

//注意:如果往数组字段中添加的是文档类型,必须一模一样才会进行去重

db.person.updateOne({name:'zs'},{$addToSet:{books:{name:'html',price:'66'}}})

//下面的和上面的顺序不一样,就不会进行去重

db.person.updateOne({name:'zs'},{$addToSet:{books:{price:'66',name:'html'}}})

//注意:如果往数组字段中添加的数组,那么必须一模一样才会进行去重

db.person.updateOne({name:'ls'},{$addToSet:{tags:['1','2']}})
db.person.updateOne({name:'ls'},{$addToSet:{tags:['2','1']}})

//注意:如果往数组字段中添加的是数组,那么默认情况下会将整个数组作为一个元素添加进去
//如果不想一个整体添加进去,那么必须使用$each来添加

db.person.updateOne({name:'ls'},{$addToSet:{tags:{$each:['2','1']}}})
db.person.find()

teacher's code;

1.$addToSet数组更新操作符

$addToSet: 向数组字段中添加元素
格式 :

{$addToSet: {<field>:<values>, ...}}
2.示例
db.person.insert([
{name:'zs', books:[{name:'html', price:66}, {name:'js', price:88}], tags:['html', 'js']},
{name:'ls', books:[{name:'vue', price:99}, {name:'node', price:199}], tags:['vue', 'node']}
])
db.person.update({name:'zs'}, {$addToSet:{tags:'react'}})
3.注意点

// 注意点:如果操作的元素不存在, 那么会自动新增, 并且将操作的值赋值给新增的数组字段

db.person.update({name:'zs'}, {$addToSet:{other:'123'}})

// 注意点: $addToSet会自动去重, 如果添加的元素已经存在了, 那么就不会添加了

db.person.update({name:'zs'}, {$addToSet:{other:'123'}})

// 注意点: 如果往数组字段中添加的是文档类型, 那么必须一模一样才会去重

db.person.update({name:'zs'}, {$addToSet:{books:{name:'html', price:66}}})
db.person.update({name:'zs'}, {$addToSet:{books:{price:66, name:'html'}}})

// 注意点: 如果往数组字段中添加的是数组, 那么也必须一模一样才会去重
db.person.update({name:‘ls’}, {KaTeX parse error: Expected 'EOF', got '}' at position 27: …ags:['1', '2']}}̲) db.person.upd…addToSet:{tags:[‘1’, ‘2’]}})
db.person.update({name:‘ls’}, {KaTeX parse error: Expected 'EOF', got '}' at position 27: …ags:['2', '1']}}̲) // 注意点: 如果往往数…each来添加

db.person.update({name:'ls'}, {$addToSet:{tags:{$each: ['1', '2', '3']}}})
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐