【问题标题】:mongodb remove field $unset not functioning to modifymongodb 删除字段 $unset 无法修改
【发布时间】:2017-02-12 02:52:57
【问题描述】:

google 返回的第一个答案是:How do I remove a field completely from Mongo?

以及文档:https://docs.mongodb.com/manual/reference/operator/update/unset/

我试过了:

db.amazon_rev.update({}, {$unset: {'meta.asin': true}}, false, true)
db.amazon_rev.update({}, {$unset: {'meta.asin':1}}, false, true)
db.amazon_rev.update({}, {$unset: {'meta.asin': ''}}, false, true)
db.amazon_rev.update({}, {$unset: {'meta.asin': ''}}, {multi: true})
db.amazon_rev.update({}, {$unset: {'meta.asin':1}}, {multi: true})
db.amazon_rev.update({}, {$unset: {'meta.asin': true}}, {multi: true})

每次都说:

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

什么都没有改变:

(此集合由 mongodb 聚合 $lookup 从两个集合(review 和 meta,均由 asin 索引)合并在一起)

db.amazon_rev.findOne()
{
    "_id" : ObjectId("57f21916672286a104572738"),
    "reviewerID" : "A2E2I6B878????",
    "asin" : "B000GI????",
    "reviewerName" : "Big????",
    "helpful" : [
        0,
        0
    ],
    "unixReviewTime" : 137???????,
    "reviewText" : "........................................",
    "overall" : 5,
    "reviewTime" : "????, 2013",
    "summary" : "............",
    "meta" : [
        {
            "_id" : ObjectId("57f218e2672286a10456af7d"),
            "asin" : "B000GI????",
            "categories" : [
                [
                    ".................."
                ]
            ]
        }
    ]
}

我错过了什么吗?感谢您的任何建议!

【问题讨论】:

  • Remove a field from array element in mongodb 的可能重复项。取消设置不适用于数组。
  • @RobertMoskal 感谢您的指导,文档中的示例说“以下 update() 操作使用 $unset 运算符从产品集合中的第一个文档中删除字段数量和库存”。所以我认为multi 不仅会修改第一个文档。如果 $unset 对数组不起作用,它支持什么样的集合?

标签: mongodb


【解决方案1】:

可以尝试使用位置运算符$ 并使用$exists 检查该字段是否存在。这个过程只处理unset数组的第一个元素。

db.amazon_rev.update({
   "meta.asin": {$exists: true}
},{
   $unset: {
      "meta.$.asin" : true
   }
},false,true);

如果您想从meta 数组中删除每个asin,那么更好的方法是查找文档并删除每个meta.asin,然后再次保存该文档。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-26
    • 2020-09-23
    • 1970-01-01
    • 2021-03-28
    • 2019-02-13
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多