2012-06-12 87 views
1

我是新來的Mongodb。所以請指導我解決這個問題。我收集了一些文檔,並希望從集合中刪除不必要的字段。有沒有自動化的方法?我知道我可以使用$ unset但似乎如果我想刪除很多領域,那麼我必須重複這個操作,每場我是吧?我發現我可以使用紅寶石根據this來做到這一點,但除去其中一些字段並不是所有的字段呢?自動刪除字段

+0

如果該字段只是不必要的,但不會導致應用程序(或法律)出現問題,則可以選擇將其保留,也可以在下次更新文檔時將其刪除。批量更新是很多工作,除非文檔縮小很多,它甚至不會節省空間。 – Thilo

+0

這是一個好主意,但是如果您的模式經常更改並且您的應用程序需要最新版本,可能會導致麻煩,因爲您不希望每次檢索文檔時都要進行幾十次比較檢查。 – philnate

回答

1

使用$unset您可以一次刪除(任意)多個字段。與多更新一起,您將獲得類似自動方法的內容。所以要刪除只有一些字段讓我們考慮這個示例文檔:{_id:OID, a: { b: 2, c: 3}, d : [1,2]}你可以使用這個:$unset : {"a.b" : 1, d : 1}來刪除嵌套元素b以及數組d。

如果您只想刪除數組中的某些項目,我相信您必須使用positional operator,但我沒有使用它。

+0

okThanks!你知道我怎麼能用紅寶石做到這一點?我只是不能理解這個http://api.mongodb.org/ruby/current/Mongo/Collection.html#remove-instance_method – Kuralai

+0

刪除命令是你不想使用的東西,因爲這會刪除符合你的搜索條件的文檔比取消給定的字段。您應該使用更新。 (我對此不太熟悉):'collection.update({「$ exists」:{「fieldToRemove」:true}},{「$ unset」 :{「fieldToRemove」:1}},{multi = true})'。 – philnate