独特的索引不是那么独特

我试图故意创build并尝试在MongoDB的唯一索引上编写一个副本用于testing目的。 我的代码基本上是:

db.collection("foo").ensureIndex({a: 1}, {unique: true}, function () { db.collection("foo").insert({a: "foo"}, function () { db.collection("foo").insert({a: "foo"}); }); }); 

但是,这不会以任何方式失败。 如果我连接到我的数据库并运行db.foo.find({a: "foo"})我会在运行后find两个结果。 这表示{unique: true}工作不正常/没有做任何事情/ etc。

使用createIndex也不起作用。

我是否正确使用MongoDB唯一索引?

您正在创build索引,但没有正确响应从数据库发送的潜在错误。

在使用NodeJS时,您需要检查callback的第一个参数以检查错误(大多数使用callback的NodeJS API遵循此模式,就像MongoDB NodeJS Native驱动程序一样):

 db.collection("foo").ensureIndex({a: 1}, {unique: true}, function (err) { if(err) { console.log('failed to create index: ', err); return; } db.collection("foo").insert({a: "foo"}, function (err) { if(err) { console.log('first insert failed: ', err); return; } db.collection("foo").insert({a: "foo"}, function (err) { if(err) { console.log('insert failed:', err); return; } }); }); }); 

在我尝试了我的mongo之后,恐怕代码是有用的。 logging在保证索引后是唯一的。 你可以检查你的mongo版本或者在callback中设置err来查找任何语法错误。