mongodb remove field $unset无法正常工作以进行修改。
mongodb remove field $unset无法正常工作以进行修改。
谷歌返回的第一个答案是:如何从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" : [ [ ".................." ] ] } ] }
我有什么遗漏的吗?感谢任何建议!
问题的出现原因是在使用$unset操作符移除字段时,它无法成功地修改指定的字段。
解决方法是可以尝试使用位置操作符$,并使用$exists检查字段是否存在。这个过程只会将数组的第一个元素取消设置。
下面是一个示例代码,用于更新满足条件的文档并移除meta字段中的asin字段:
db.amazon_rev.update({ "meta.asin": {$exists: true} },{ $unset: { "meta.$.asin" : true } },false,true);
如果你想要从meta数组中删除每个asin字段,更好的方法是查找文档并逐个移除meta.asin字段,然后再保存该文档。