[英]How do I unset a unique field from all documents in Mongo?
我正在使用mongoose / nodeJS,並且正在使用node-migrate
編寫一些遷移腳本。
我的更新腳本正在將新的計算字段添加到集合中的所有文檔中:
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);
};
但我得到重復的密鑰錯誤。 該架構確實確實將該字段定義為唯一索引的,所以這很有意義。
如果該字段定義為唯一字段,如何從集合中的所有文檔中取消設置/刪除該字段?
謝謝。
唯一索引將不允許索引字段缺失或為null
多個文檔。
為此,您需要將現有的唯一索引放在hash
然后將其重新創建為唯一的稀疏索引。
將索引放在外殼中:
db.posts.dropIndex('$_hash_1')
更新架構中hash
的定義,使其成為稀疏的唯一索引:
hash: {type: String, index: {unique: true, sparse: true}}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.