0
我正在使用mongoose/nodeJS,我正在使用node-migrate
編寫一些遷移腳本。如何取消Mongo中所有文檔中的唯一字段?
我的更新腳本中添加一個新的計算字段集合中的所有文件:
exports.up = function (done) {
Posts.find({_hash: null}, function (err, posts) {
async.forEach(posts, function (post, next) {
var hash = hash(post);
post.update({_hash: hash}, next);
}, done);
});
};
和工作正常。我抓取所有沒有hash
字段的文檔,計算它並更新記錄。
但node-migrate
也支持「向下」遷移,以回滾更改。在這種情況下,我想刪除來自所有文檔的散列字段。
exports.down = function (done) {
Posts.update({_hash: {$ne: null}}, {$unset: {$hash: 1}}, {multi: true}, done);
};
但我得到一個重複鍵錯誤。模式確實將該字段定義爲唯一索引,這樣纔有意義。
如果該字段被定義爲唯一的,我如何從集合中的所有文檔中取消/刪除字段?
謝謝。
我只注意到了DUP鍵錯誤看起來小疑犯:'MongoError:E11000重複鍵錯誤索引:myApp.posts。$ _ hash_1 dup鍵:{:null}'..?它爲什麼說'dup key:{:null}',它看起來像一個沒有鍵的對象字面值,只是一個空值。或者我讀錯了嗎? –
您的代碼示例中有語法錯誤。 Posts.udpate的第一個參數缺少一個關閉的'}':'{_hash:{$ ne:null}' –
謝謝@AndrewLavers,只是SO文章中的一個錯字;無關。雖然固定。 –