详情

首页手游攻略 MongoDB使用$addToSet向数组中添加元素的操作代码实用指南

MongoDB使用$addToSet向数组中添加元素的操作代码实用指南

佚名 2026-09-04 10:40:02

平时做技术实践时,很多问题不是概念不会,而是细节没串起来。拿“MongoDB采用$addToSet向数组中添加元素的操作代码”来说,它看着像小点,放到项目里常会牵出环境、配置、兼容性和维护成本。下面按实际采用顺序,把思路、关键写法和容易踩坑的地方讲清楚,便于大家直接对照操作。

目录
  • 定义
  • 语法
  • 行为
  • 应用
    • 向非数组字段插入数据报错
    • 向数组字段插入数组
    • 向数组字段中插入数据

定义

落到代码里,采用方法$addToSet, 向数组中添加不存在的元素。如果元素已经存在于目标数组当中,则采用$addToSet不会更新当前文档。

语法

按照下面的形式采用$addToSet操作符。

{$addToSet: {<field1>: <value1>, ...}}

向嵌入文档或数组中添加元素时,采用点操作符。

行为

  • 落到代码里,自mongodb5.0开始,UPDATE操作按照字段名称的字典顺序更新字段。当字段中包含数字时,按照数字顺序依次更新字段。当然,对一个文档的多个字段操作,是原子性的。
  • 落到代码里,$addToSet只能保证不会向数组当中插入已经存在的数据。而不会对数组中已经存在的重复元素产生影响。也不会对数组中元素的顺序产生影响。
  • 结合项目来看,mongodb 5.0版本以后,向$addToSet传入空表达式({ })时,mongodb不再抛出错误。空表达式不会修改字段值,也不会在oplog中,添加新的操作记录。
  • 结合项目来看,采用$addToSet向不存在的数组字段添加数组元素时,mongodb会新建该字段同时将元素插入到该字段当中。
  • 不能够向非数组字段插入元素,否则会报错。
  • 实际处理时,向数组字段插入的是一个数组时,$addToSet方法将指定的数组作为一个元素插入到数组当中。
  • 实际处理时,向数组字段插入文档时,mongodb会判断即将插入的文档与数组当中已有的元素是否严格相等。包括字段名称,字段值,字段顺序等。

应用

向非数组字段插入数据报错

新建pigments集合并插入数据

db.pigments.insertOne({_id: 1, colors: "blue, green, red"})

采用$addToSet向colors字段插入数组元素

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

db.alphabet.insertOne({_id: 1, letters: ["a", "b"]})

向letters字段,插入数组["c", "d"]

db.alphabet.updateOne({_id: 1}, {$addToSet:{"letters": ["c", "d"]}})

查看插入结果

db.alphabet.find()
{
    "_id" : 1,
    "letters" : [
        "a",
        "b",
        [ "c", "d" ]
    ]
}

实际处理时,将数组作为一个整体插入到数组letters中。若期望将数组["c", "d"]的每一个元素插入字段letters中,采用$each操作符。

db.alphabet.updateOne({_id:1}, {$addToSet: {"letters":{$each: ["c", "d"]}}})

向数组字段中插入数据

新建集合inventory并插入数据

db.inventory.insertOne(
    {_id:1, item: "polarizing_filter", tags: ["electronics", "camera"]}
    )

向字段tags插入元素

db.inventory.updateOne(
    {_id:1},
    {$addToSet: {tags: "accessories"}}
    )

查询插入结果

向数组中插入已存在的元素

db.inventory.updateOne(
    {_id:1},
    {$addToSet: {tags: "camera"}}
    )

因为"camera"已经存在于数组tags当中,所以没有数据更新。

{
    "acknowledged" : true,
    "matchedCount" : 1,
    "modifiedCount" : 0
}

实际处理时,以上就是MongoDB采用$addToSet向数组中添加元素的操作代码的详细内容,更多关于MongoDB $addToSet添加元素的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:

  • MongoDB中常用操作$addToSet、$pop和$rename
  • Mongodb采用$pop删除数组中元素的操作指南
  • Mongodb亿级数据性能测试和压测
  • MongoDB数据备份迁移的全过程

相关资讯
点击查看更多
游戏推荐
推荐专题
热门阅读
推荐下载