Get the App
SLTechnology News&Howtos  ›  Database  › 

MongoDB introduces two methods of deleting array elements based on a key in an embedded document

Shulou Source: shulou.com Published: 2022-06-01 04:44:02 10月04日 Update

> use test

switched to db test

插入测试数据:

> db.country.insert({"name":"China","province":[{"name":"Henan","code":"1001"},{"name":"Hebei","code":"1002"},{"name":"Jiangsu","code":"1003"}]});

WriteResult({ "nInserted" : 1 })

方法一:

想删除名为"Hebei"的省份信息,分两步:

(1).查找到对应的数组元素,并将其替换为"null"

> db.country.update({"name":"China","province.name":"Hebei"},{"$set":{"province.$":"null"}});

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

此时数组数据如下:

> db.country.find()

{ "_id" : ObjectId("59f97d03a4fe2442400cbd2c"), "name" : "China", "province" : [ { "name" : "Henan", "code" : "1001" }, "null", { "name" : "Jiangsu", "code" : "1003" } ] }

(2).然后再清空数组中的"null"

> db.country.update({"name":"China"},{"$pull":{"province":"null"}});

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

删除后的最终数据如下:

> db.country.find()

{ "_id" : ObjectId("59f97d03a4fe2442400cbd2c"), "name" : "China", "province" : [ { "name" : "Henan", "code" : "1001" }, { "name" : "Jiangsu", "code" : "1003" } ] }

>

方法二:

根据某个键直接删除数组元素:

> db.country.update({"name":"China"},{"$pull":{"province":{"name":"Hebei"}}});

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

>

> db.country.find()

{ "_id" : ObjectId("59f97e58a4fe2442400cbd2d"), "name" : "China", "province" : [ { "name" : "Henan", "code" : "1001" }, { "name" : "Jiangsu", "code" : "1003" } ] }

>

Tags: Array data element method information province and will test document Apple Docker Huawei Linux macOS MariaDB Microsoft MySQL NVidia OPPO Reno macOS vpn Xiaomi Shulou Tech Info Microsoft