Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 唯一索引不是唯一的_Node.js_Mongodb_Node Mongodb Native - Fatal编程技术网

Node.js 唯一索引不是唯一的

Node.js 唯一索引不是唯一的,node.js,mongodb,node-mongodb-native,Node.js,Mongodb,Node Mongodb Native,为了测试的目的,我试图在MongoDB上的唯一索引上创建并尝试编写一个副本。我的代码基本上是: db.collection("foo").ensureIndex({a: 1}, {unique: true}, function () { db.collection("foo").insert({a: "foo"}, function () { db.collection("foo").insert({a: "foo"}); }); }); 然而,这并没有以任何方

为了测试的目的,我试图在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}
工作不正常/没有做任何事情/etc

使用
createIndex
也不起作用


我是否错误地使用了MongoDB唯一索引?

在我尝试使用mongo之后,恐怕代码很有用。确保索引后记录将是唯一的。您可以检查mongo版本或在回调中设置err以查找任何语法错误。

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

在使用NodeJS时,需要检查回调的第一个参数以检查错误(大多数带有回调的NodeJS API都遵循此模式,MongoDB NodeJS本机驱动程序也是如此):


您应该检查回调中的
err
(即first)参数,以帮助诊断问题。我无法在运行完全相同的代码(用connect包装)的情况下复制此参数。它会像预期的那样出错,结果在数据库中留下1个文档。这很好,但主要问题是,即使产生了错误,仍然会插入重复条目。是否显示了任何错误?我只是按原样运行代码,唯一的错误是:
MongoError:E11000重复键错误索引:test123.foo。$a_1 dup-key:{:“foo”}
您可以尝试将
background:false
添加到选项中。如果已经存在重复项,则需要清除集合或添加:
{dropDups:true}
强制修复数据()。如果存在重复项,则不会创建索引。
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;  
              }
        });
    });
});