我正在尝试确保索引在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'应该是唯一的。我在这里错过了什么吗?
答案 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);
}
});