我正在尝试故意创建并尝试在MongoDB上的唯一索引上编写副本以进行测试。我的代码基本上是:
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"})
,我会在运行后找到两个结果。这表明{unique: true}
无法正常工作/没有做任何事情等等。
使用createIndex
也不起作用。
我是否错误地使用了MongoDB唯一索引?
答案 0 :(得分:2)
您正在正确创建索引,但未正确响应从数据库发送的潜在错误。
当您使用NodeJS时,您需要检查回调的第一个参数以检查错误(大多数带有回调的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;
}
});
});
});
答案 1 :(得分:0)