mongodb数组操作(添加) - Mon, Aug 5, 2019
mongodb对数组的操作,对整个文档来说是更新操作,对文档的数组字段有增删改查操作。
1. 概述
mongodb对数组的操作,对整个文档来说是更新操作,对文档的数组字段有增删改查操作。
2. 添加数组元素
2.1 $push
$push
向数组中添加元素,不会进行重复性检查。
例如:
{
_id: NumberInt(1),
colors: [
{
name: "blue"
},
{
name: "green"
},
{
name: "red"
}
]
}
- 以下操作会插入新的元素
db.getCollection('test').update({ _id: 1 }, { $push: { colors: {"name" : "blue"} } })
变更为
{
"_id" : 1,
"colors" : [
{
"name" : "blue"
},
{
"name" : "green"
},
{
"name" : "red"
},
{
"name" : "blue"
}
]
}
2.2 $addToSet
$addToSet
向数组中添加元素,如果元素已经存在不会添加,能够防止添加重复的数据。
例如:
{
_id: NumberInt(1),
colors: [
{
name: "blue"
},
{
name: "green"
},
{
name: "red"
}
]
}
- 以下操作不会插入新的元素
db.getCollection('test').update({ _id: 1 }, { $addToSet: { colors: {"name" : "blue"} } })
- 以下操作会插入新元素
db.getCollection('test').update({ _id: 1 }, { $addToSet: { colors: {"name" : "blue", "id":"222"} } })
变更为
{
_id: NumberInt(1),
colors: [
{
name: "blue"
},
{
name: "green"
},
{
name: "red"
},
{
name: "blue",
id: "222"
}
]
}
由此可见$addToSet
对object数据的查重也是有效的。
3. 批量添加数组元素
3.1 $push
{ $push: { <field>: { $each: [ <value1>, <value2> ... ] } } }
例如:
{
_id: NumberInt(1),
colors: [
{
name: "blue"
},
{
name: "green"
},
{
name: "red"
}
]
}
- 以下操作会插入新的元素
db.getCollection('test').update({ _id: 1 }, { $push: { colors: {$each: [{"name" : "blue"}, {"name" : "blue1"}]} } })
变更为
{
"_id" : 1,
"colors" : [
{
"name" : "blue"
},
{
"name" : "green"
},
{
"name" : "red"
},
{
"name" : "blue"
},
{
"name" : "blue1"
}
]
}
3.2 $addToSet
{ $addToSet: { <field>: { $each: [ <value1>, <value2> ... ] } } }
例如:
{
_id: NumberInt(1),
colors: [
{
name: "blue"
},
{
name: "green"
},
{
name: "red"
}
]
}
- 以下操作会插入新的元素
db.getCollection('test').update({ _id: 1 }, { $addToSet: { colors: {$each: [{"name" : "blue"}, {"name" : "blue1"}]} } })
变更为
{
"_id" : 1,
"colors" : [
{
"name" : "blue"
},
{
"name" : "green"
},
{
"name" : "red"
},
{
"name" : "blue1"
}
]
}