kaisawind's blog
  • 关于
  • 所有帖子

mongodb数组操作(添加) - Mon, Aug 5, 2019

mongodb对数组的操作,对整个文档来说是更新操作,对文档的数组字段有增删改查操作。

  • 1. 概述
  • 2. 添加数组元素
    • 2.1 $push
    • 2.2 $addToSet
  • 3. 批量添加数组元素
    • 3.1 $push
    • 3.2 $addToSet

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"
        }
    ]
}


辽ICP备2021007608号 | © 2025 | kaisawind

Facebook Twitter GitHub