确保独特的索引mongodb

时间:2014-08-12 08:43:13

标签: node.js mongodb

我正在尝试确保索引在mongodb中是唯一的,我使用node.js然而它根本不起作用。

//ensures unique data only
db.social_media.ensureIndex( { name: 1 }, { unique: true } );

db.social_media.insert({name:'stan'}, function(err, docs){
    console.log(err);
    console.log(docs);
});

db.social_media.insert({name:'stan'}, function(err, docs){
    console.log(err);
    console.log(docs);
});

以下输出是:

null
{ name: 'stan', _id: 53e9d2ee88b96dd224c6333f }
null
{ name: 'stan', _id: 53e9d2ee88b96dd224c63340 }

意味着两个文档都插入了 - 即使我特别指定'name'应该是唯一的。我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:1)

您在确保索引之前开始插入文档,从而产生竞争条件。

如果您的集合包含重复的密钥,则无法创建唯一索引。

尝试以下代码(但首先要确保您的集合为空,或者至少不包含重复的密钥):

//ensures unique data only
db.social_media.ensureIndex({
  name: 1
}, {
  unique: true
}, function (err) {
  if (err) {
    console.log('ensureIndex failed', err);
  } else {
    db.social_media.insert({name:'stan'}, console.log);
    db.social_media.insert({name:'stan'}, console.log);
  }
});