定义
使用方法$addToSet, 向数组中添加不存在的元素。如果元素已经存在于目标数组当中,则使用$addToSet不会更新当前文档。
语法
按照下面的形式使用$addToSet操作符。
1 | {$addToSet: {: , ...}} |
当向嵌入文档或数组中添加元素时,使用点操作符。
行为
- 自mongodb5.0开始,UPDATE操作按照字段名称的字典顺序更新字段。当字段中包含数字时,按照数字顺序依次更新字段。当然,对一个文档的多个字段操作,是原子性的。
- $addToSet只能保证不会向数组当中插入已经存在的数据。而不会对数组中已经存在的重复元素产生影响。也不会对数组中元素的顺序产生影响。
- mongodb 5.0版本以后,向$addToSet传入空表达式({ })时,mongodb不再抛出错误。空表达式不会修改字段值 ,也不会在oplog中,添加新的操作记录。
- 使用$addToSet向不存在的数组字段添加数组元素时,mongodb会创建该字段并将元素插入到该字段当中。
- 不可以向非数组字段插入元素,否则会报错。
- 向数组字段插入的是一个数组时,$addToSet方法将指定的数组作为一个元素插入到数组当中。
- 向数组字段插入文档时,mongodb会判断即将插入的文档与数组当中已有的元素是否严格相等。包括字段名称,字段值,字段顺序等。
应用
向非数组字段插入数据报错
创建pigments集合并插入数据
1 | db.pigments.insertOne({_id: 1 , colors: "blue, green, red" }) |
使用$addToSet向colors字段插入数组元素
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | db.pigments.updateOne({_id: 1 }, {$addToSet: { "colors" : "mauve" }}) WriteError({ "index" : 0 , "code" : 2 , "errmsg" : "Cannot apply $addToSet to non-array field. Field named 'colors' has non-array type string" , "op" : { "q" : { "_id" : 1 }, "u" : { "$addToSet" : { "colors" : "mauve" } }, "multi" : false , "upsert" : false } }) |
向数组字段插入数组
创建集合alphabet
1 | db.alphabet.insertOne({_id: 1 , letters: [ "a" , "b" ]}) |
向letters字段,插入数组[“c”, “d”]
1 | db.alphabet.updateOne({_id: 1 }, {$addToSet:{ "letters" : [ "c" , "d" ]}}) |
查看插入结果
1 2 3 4 5 6 7 8 9 | db.alphabet.find() { "_id" : 1 , "letters" : [ "a" , "b" , [ "c" , "d" ] ] } |
将数组作为一个整体插入到数组letters中。若期望将数组[“c”, “d”]的每一个元素插入字段letters中,使用$each操作符。
1 | db.alphabet.updateOne({_id: 1 }, {$addToSet: { "letters" :{$each: [ "c" , "d" ]}}}) |
向数组字段中插入数据
创建集合inventory并插入数据
1 2 3 | db.inventory.insertOne( {_id: 1 , item: "polarizing_filter" , tags: [ "electronics" , "camera" ]} ) |
向字段tags插入元素
1 2 3 4 | db.inventory.updateOne( {_id: 1 }, {$addToSet: {tags: "accessories" }} ) |
查询插入结果
向数组中插入已存在的元素
1 2 3 4 | db.inventory.updateOne( {_id: 1 }, {$addToSet: {tags: "camera" }} ) |
因为”camera”已经存在于数组tags当中,所以没有数据更新。
1 2 3 4 5 | { "acknowledged" : true , "matchedCount" : 1 , "modifiedCount" : 0 } |
以上就是MongoDB使用$addToSet向数组中添加元素的操作代码的详细内容,更多关于MongoDB $addToSet添加元素的资料请关注IT俱乐部其它相关文章!