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文章中的一个错字;无关。虽然固定。 –