簡體   English   中英

如何在Mongo中的所有文檔中取消設置唯一字段?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM