平时做技术实践时,很多问题不是概念不会,而是细节没串起来。拿“MongoDB采用$addToSet向数组中添加元素的操作代码”来说,它看着像小点,放到项目里常会牵出环境、配置、兼容性和维护成本。下面按实际采用顺序,把思路、关键写法和容易踩坑的地方讲清楚,便于大家直接对照操作。
落到代码里,采用方法$addToSet, 向数组中添加不存在的元素。如果元素已经存在于目标数组当中,则采用$addToSet不会更新当前文档。
按照下面的形式采用$addToSet操作符。
{$addToSet: {<field1>: <value1>, ...}}向嵌入文档或数组中添加元素时,采用点操作符。
新建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添加元素的资料请关注脚本之家其它相关文章!