Mongodb更新多层嵌套数组对象。

本文通过两个实例展示了如何使用MongoDB更新和删除多层数组中的对象。在例子中,我们修改了嵌套数组'condition'中的'contact'字段,并删除了数组'ins'中的特定元素。MongoDB的$set和$pull操作符配合arrayFilters可以实现这样的精细化操作。
摘要由CSDN通过智能技术生成

应对 mongodb修改多层数组对象时,一个$不够用。

栗子1:修改数组嵌套中的数据

一,原数据

{
    "_id": ObjectId("5f7d88c342318e24c4003083"),
    "id": "123456",
    "arr": [
        {
            "name": "nickchen",
            "condition": [
                {
                    "type": "phone",
                    "contact": "159*******74"
                },
                {
                    "type": "email",
                    "contact": "159*******74@163.com"
                }
            ]
        },
        {
            "name": "hunter",
            "condition": [
                {
                    "type": "phone",
                    "contact": "159*******74"
                },
                {
                    "type": "email",
                    "contact": "159*******74@163.com"
                }
            ]
        }
    ]
}

 二,SQL

//注意 $set条件与 arrayFilters条件 他们的数据层级关系。

db.lists.updateOne(
	{id:"123456"},
	{
		$set:{
			"arr.$[t].condition.$[val].contact":"123456789"
		}
	},
	{
		arrayFilters:[{
			"t.name":"nickchen",
		},{
			"val.contact":"159*******74"
		}],
        multi:true
	}
)

三,修改结果

{
    "_id": ObjectId("5f7d88c342318e24c4003083"),
    "id": "123456",
    "arr": [
        {
            "name": "nickchen",
            "condition": [
                {
                    "type": "phone",
                    "contact": "123456789"
                },
                {
                    "type": "email",
                    "contact": "159*******74@163.com"
                }
            ]
        },
        {
            "name": "hunter",
            "condition": [
                {
                    "type": "phone",
                    "contact": "159*******74"
                },
                {
                    "type": "email",
                    "contact": "159*******74@163.com"
                }
            ]
        }
    ]
}

栗子二:删除数组中的元素

一,原数据

{
    "_id": ObjectId("5f7d829842318e24c4003082"),
    "id": "159789",
    "arr": [
        {
            "name": "a1",
            "ins": [
                "10",
                "11",
                "12"
            ]
        },
        {
            "name": "a2",
            "ins": [
                "13",
                "14",
                "15"
            ]
        }
    ]
}

二,SQL

db.lists.updateOne(
		{"id":"159789"},
		{
			$pull:{
				"arr.$[t].ins":{$all:["10"]}
			}
		},
		{
			arrayFilters:[{
				"t.name":"a1",
			}],
			multi:true
		}
)

三,修改结构

{
    "_id": ObjectId("5f7d829842318e24c4003082"),
    "id": "159789",
    "arr": [
        {
            "name": "a1",
            "ins": [
                "11",
                "12"
            ]
        },
        {
            "name": "a2",
            "ins": [
                "13",
                "14",
                "15"
            ]
        }
    ]
}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值