nodejs中给mongoDB数据建立索引出错
发布于 2年前 作者 tianxing0923 2876 次浏览

按照nodejs开发指南中的代码,给user文档数据建立索引如下:

collection.ensureIndex({name: 1}, {unique: true});

在运行时报如下错误:

Error: Cannot use a writeConcern without a provided callback

但是我手动到终端去运行:

db.users.ensureIndex({name: 1}, {unique: true})

没有报任何错误,求各位大神指点迷津啊

8 回复

看了你发的链接,跟我的问题有点不一样啊,他是不能插入进去,而我的是可以插入,就是不能建索引,如果把collection.ensureIndex({name: 1}, {unique: true});给注释掉,就不会出任何错误了,看我片段代码:

User.prototype.save = function (callback) {
   var user = {
      name: this.name,
      password: this.password
  };

  mongodb.open(function (err, db) {
    if (err) {
      return callback(err);
    }

    db.collection('users', function (err, collection) {
      if (err) {
        mongodb.close();
        return callback(err);
      }

      // collection.ensureIndex({name: 1}, {unique: true});

      collection.insert(user, {safe: true}, function (err, user) {
        mongodb.close();
        callback(err, user);
      });
    });
  });
};

把注释去掉就会报错。

collection.ensureIndex(“name”); 

试试

@tianxing0923 具体不清楚, 但 Node 和 MongoDB 里的 JS 不是同一套实现, MongoDB 的 Shell 里能跑成功, Node 里跑不成功我觉得很不正常 我的话, 既然他说要有 Callback 我就写一个 Callback 试试… 等待大神分析具体情况…

@jiyinyiyong 确实,加一个callback就不会报错了,代码:

collection.ensureIndex({name: 1}, {unique: true}, function (err) {
  callback(err);
});

不知道是什么原因,我看mongoDB官方API也没说要加callback,等待大神分析。。

试过了,报一样的错误信息。

也遇到了同样情况。在save的时候没有假cb。但是在macos 10.8下是可以的。 在debian下不行。

估计是版本的问题,http://mongodb.github.io/node-mongodb-native/markdown-docs/indexes.html官方文档是需要callback的,不管什么时候,异步执行的都应该有这个callback

回到顶部