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 })
并没有改变:
(此集合由两个集合(审核和元,由asin索引)通过mongodb聚合$ lookup合并在一起)
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" : [
[
".................."
]
]
}
]
}
我错过了什么吗?谢谢你的任何建议!
答案 0 :(得分:3)
可以尝试使用位置运算符$
并使用$exists
检查该字段是否存在。此过程仅unset
数组的第一个元素。
db.amazon_rev.update({
"meta.asin": {$exists: true}
},{
$unset: {
"meta.$.asin" : true
}
},false,true);
如果要从asin
数组中删除每个meta
,则更好的处理是查找文档并删除每个meta.asin
,然后再次保存该文档。