meteor js simpleschema带有模式的索引已经存在,具有不同的选项

时间:2015-07-04 22:45:51

标签: javascript mongodb meteor

我使用meteor js w / simple-schema并获取

MongoError: Index with pattern: { username: 1 } already exists with different options

我在db.users集合周围的架构是

Schema = {};

Schema.User = new SimpleSchema({
...
 username: { 
     type: String, 
     unique: true, 
     regEx: /^[a-z0-9]{3,32}$/ , 
     max: 32,
     min: 3 },
...
});

我已经删除了mongodb中的索引,但是当我重新启动应用程序时仍然出现错误。有人碰到过这个吗?

2 个答案:

答案 0 :(得分:0)

Meteor在users个集合中附带了一些默认索引。来自accounts-base

/// DEFAULT INDEXES ON USERS
Meteor.users._ensureIndex('username', {unique: 1, sparse: 1});
Meteor.users._ensureIndex('emails.address', {unique: 1, sparse: 1});
Meteor.users._ensureIndex('services.resume.loginTokens.hashedToken',
                          {unique: 1, sparse: 1});
Meteor.users._ensureIndex('services.resume.loginTokens.token',
                          {unique: 1, sparse: 1});
// For taking care of logoutOtherClients calls that crashed before the tokens
// were deleted.
Meteor.users._ensureIndex('services.resume.haveLoginTokensToDelete',
                          { sparse: 1 });
// For expiring login tokens
Meteor.users._ensureIndex("services.resume.loginTokens.when", { sparse: 1 });

我没有检查过,但我猜测unique: true可能是您的架构中与上述内容冲突的部分。

答案 1 :(得分:0)

您可以完美地将您的架构与已经为用户名和电子邮件设置索引和唯一的现有架构合并。因为你只是通过将它们明确地设置为false来删除它们,它们将保留。