【问题标题】:Mongodb: Unset Field from Document?Mongodb:从文档中取消设置字段?
【发布时间】:2017-04-08 15:06:57
【问题描述】:
{
 "_id" : ObjectId("55d6cb28725f3019a5241781"),
    {
        "description" : "details of student",
        "displayGroup" : "",
        "role" : [
            {
                "name" : "admin",
                "edit" : "no"
            }
        ],
        "timestamp" : "2015-09-01 15:29:09"
    },
"subject" : {
        "class" : "Fifth",
        "description" : "5th class",
        "displayGroup" : "section A",
        "timestamp" : "2015-09-01 15:29:09"
    }
    }

我有这些数据,并且我想从我的文档中删除 Subjet 阵列,其中 Class =5我该如何删除?

我在查询下面运行这个:-

db.collectionName.update({"subject.class":"Fifth"},{$unset:{subject:""}})

但这是给 1 匹配没有修改。 我想一次性从我的文档中删除它。帮帮我吗?

【问题讨论】:

  • 5 != Fifth。你是怎么得到1场比赛的?是的,因为您还有另一个文档,其中包含 Fifth
  • 哦,我的错误..已编辑。
  • 那是一份有效的文件吗? _id 字段之后的子文档缺少什么字段?

标签: mongodb unset


【解决方案1】:

假设您有以下文档(必须添加 person 属性,因为它无效)。

> db.coll.findOne({"subject.class": "Fifth"})
{
    "_id" : ObjectId("55d6cb28725f3019a5241781"),
    "person" : {
        "description" : "details of student",
        "displayGroup" : "",
        "role" : [
            {
                "name" : "admin",
                "edit" : "no"
            }
        ],
        "timestamp" : "2015-09-01 15:29:09"
    },
    "subject" : {
        "class" : "Fifth",
        "description" : "5th class",
        "displayGroup" : "section A",
        "timestamp" : "2015-09-01 15:29:09"
    }
}

当您在subject 上使用$unset 时,文档被匹配和修改。使用 update's multi option 可以指示 mongo 更新与查询匹配的所有文档。

> db.coll.update({"subject.class": "Fifth"}, {$unset: {subject: ""}}, {multi: true})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

鉴于 subject 已被删除,无法再对 subject.class 进行查询。

通过_id查询可以看到该字段已从文档中删除。

> db.coll.findOne({_id: ObjectId("55d6cb28725f3019a5241781")})
{
    "_id" : ObjectId("55d6cb28725f3019a5241781"),
    "person" : {
        "description" : "details of student",
        "displayGroup" : "",
        "role" : [
            {
                "name" : "admin",
                "edit" : "no"
            }
        ],
        "timestamp" : "2015-09-01 15:29:09"
    }
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-12
  • 2015-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-21
  • 2020-02-02
相关资源
最近更新 更多