2016-10-04 22 views
1

返回的第一個答案谷歌是: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的聚集$查找)

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

[從mongodb中的數組元素中刪除一個字段]可能有重複(http://stackoverflow.com/questions/19945924/remove-a-field-from-array-element-in-mongodb)。取消設置不適用於陣列。 –

+0

@RobertMoskal感謝您的指導,文檔中的示例顯示「以下update()操作使用$ unset運算符從產品集合中的第一個文檔中刪除字段數量和庫位」。所以我認爲'multi'不僅會修改第一個文檔。如果$ unset在數組上不起作用,它支持哪種類型的集合? – leoce

回答

3

可以嘗試使用位置運算符$並檢查該字段是否存在或使用$exists。這個過程只有unset數組的第一個元素。

db.amazon_rev.update({ 
    "meta.asin": {$exists: true} 
},{ 
    $unset: { 
     "meta.$.asin" : true 
    } 
},false,true); 
如果你想刪除的每個 asinmeta陣列

則更好的過程是發現的文件和刪除每個meta.asin然後再保存該文檔。

+0

哇。非常感謝! – Omeriko