mongodb删除字段笔记!

2021-09-16  本文已影响0人  DragonersLi

删除整个文档的某几个字段:db.collection.update({},{$unset: {field1:1,field2:1}},{multi: true});

{uid:{$lt:2000}}, #删除的where条件
{$unset: {name:1,mobile:1}}, #删除的字段,可以多个
{multi: true} #批量删除,无此项则只删除匹配的第一个

不带{multi: true}只匹配删除一条文档记录

> db.team_award.update({uid:{$lt:600}},{$unset: {mobile:1,vip:1}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

带条件的多字段批量删除

> db.team_award.update({uid:{$lt:2000}},{$unset: {mobile:1,nickname:1}},{multi: true});
WriteResult({ "nMatched" : 1481, "nUpserted" : 0, "nModified" : 994 })

不带条件的字段批量删除

> db.team_award.update({},{$unset: {id:1}},{multi: true});
WriteResult({ "nMatched" : 394538, "nUpserted" : 0, "nModified" : 394538 })  
> db.team_award.findOne();
{
    "_id" : ObjectId("6141c099aa08cc1a10128b61"),
    "uid" : 508,
    "mobile" : "150xxxx5913",
    "nickname" : "test",
    "vip" : 1,
    "pid" : [ ],
    "money" : "143.30",
    "team_award" : 0,
    "award" : 0,
    "cycle" : 202108,
    "status" : 0,
    "create_time" : 1631699075,
    "update_time" : 0
}

以上删除的是普通类型的字段,当存储的字段是数组,我们要整个删除时,可用上面方法;如果要删除数组字段中的某个元素字段时则不通用。删除数组字段的某些元素:

#where条件为空则循环全部文档数据,然后每个文档item数组遍历,delete删除数组的元素,然后save保存
db.team_award.find({}).forEach(function(item) {
    var pid = item.pid;
    for(var i = 0; i < pid.length; ++i) {  
        if(pid[i]["upid"]){ //循环遍历删除pid数组中的upid字段
            delete (pid[i]["upid"]);
        }
        if(pid[i]["tpid"]){ //循环遍历删除pid数组中的tpid字段
            delete (pid[i]["tpid"]);
        }
    }
    db.team_award_20210915.save(item);//删除后保存文档
}); 

其中pid存储的是数组,每个元素包含id字段,如果是第一个元素,则又包含upid字段,如果是最后一个元素又包含tpid字段

> db.team_award.findOne({uid:13457}) #查找一条文档记录
#删除前,数组字段内容
"pid" : [
        {
            "id" : 3077,
            "upid" : 3077
        },
        {
            "id" : 2956
        },
        {
            "id" : 508,
            "tpid" : 508
        }
    ],

#删除后,数组字段内容
    "pid" : [
        {
            "id" : 3077
        },
        {
            "id" : 2956
        },
        {
            "id" : 508
        }
    ],

team_award > pid

#删除前:
(Document) 2 Fields 528 528 
(Document) 1 Field  525     
(Document) 1 Field  524     
(Document) 2 Fields 508     508

#删除后:
(Document) 1 Field  528
(Document) 1 Field  525
(Document) 1 Field  524
(Document) 1 Field  508
上一篇 下一篇

猜你喜欢

热点阅读