如何设置useMongoClient(Mongoose 4.11.0)?

时间:2017-06-25 19:16:25

标签: node.js mongodb mongoose

这是我用来连接数据库的代码:

private connectDatabase(databaseUri: string): Promise<Mongoose.Connection> {
    return Mongoose.connect(databaseUri).then(() => {
        debug('Connected to MongoDB at %O', databaseUri);
        return Mongoose.connection;
    });
}

今天我将Mongoose更新到版本4.11.0,并在运行测试时收到此警告:

(node:4138) DeprecationWarning: `open()` is deprecated in mongoose >= 4.11.0,
use `openUri()` instead, or set the `useMongoClient` option if using `connect()`
or `createConnection()`

我找不到任何关于如何“设置useMongoClient”的信息。

你们知道怎么做?

13 个答案:

答案 0 :(得分:74)

这是您使用 useMongoClient 的方式: mongoose.connect('mongodb://localhost/advisorDemoTestDB', { useMongoClient: true })

答案 1 :(得分:29)

{useMongoClient:true} 添加为connect或createConnection方法的另一个参数,它取决于您使用的mongoose版本。

// Using `mongoose.connect`...
var promise = mongoose.connect('mongodb://localhost/myapp', {
  useMongoClient: true,
  /* other options */
});
// Or `createConnection`
var promise = mongoose.createConnection('mongodb://localhost/myapp', {
  useMongoClient: true,
  /* other options */
});

答案 2 :(得分:12)

mongoose.connection.openUri('mongodb://127.0.0.1/camp_v12')

有人试过吗?当我使用它时,我的弃用警告消失了,它来自文档

http://mongoosejs.com/docs/connections.html

答案 3 :(得分:9)

最简单的解决方法是打开终端,将目录更改为根项目(package.json所在的文件夹)

执行命令
npm remove mongoose

然后:

npm install mongoose@4.10.8 --save

问题解决了。

升级并不总是最好的选择。

http://mongoosejs.com/docs/connections.html

答案 4 :(得分:6)

没有打字稿,您几乎可以忽略此问题并使用Mongoose.connect(databaseUri, { useMongoClient: true })

如果你真的想避免让警告避免使用版本4.11.0。

我更新到版本4.11.1,因为@ types / mongoose @ 4.7.18尚未更新,他们没有提到useMongoClient中的字段ConnectionOptions,这是我导入的方式模块:

const Mongoose = require('mongoose');

然后使用此功能:

private connectDatabase(databaseUri: string): Promise<any> {
    return Mongoose.connect(databaseUri, { useMongoClient: true })
        .then(() => {
            console.log('Connected to MongoDB at ', databaseUri);
            return Mongoose.connection;
        })
        .catch(err => debug(`Database connection error: ${err.message}`));
}

答案 5 :(得分:6)

正如许多答案所说,在{ useMongoClient: true }connect方法的options参数中添加createConnection将解决问题。

例如

// With mongoose.connect method
mongoose.connect('mongodb://localhost/app', { useMongoClient: true });

// With createConnection method
mongoose.createConnection('mongodb://localhost/app', { useMongoClient: true });

但是,首先是什么是MongoClinet?

从MongoDB Node.js驱动程序版本1.2开始,引入了一个新的连接类MongoClient,它在所有官方驱动程序中具有相同的名称。

新连接类 MongoClient确认对MongoDB的所有写入,与已关闭确认的现有连接类Db形成对比。

所以{ useMongoClient: true }告诉moongoose使用新的连接类而不是旧连接类

了解更多信息click here

答案 6 :(得分:4)

使用Mongoose 4.11.x连接到MongoDB(使用mLab单实例和MongoDB Atlas副本集进行测试):

const mongoose = require('mongoose');

mongoose.Promise = global.Promise;

const options = {
  promiseLibrary: global.Promise,
  useMongoClient: true,
};

function connect() {
  mongoose.connect(URI, options)
    .then(function() {
      const admin = new mongoose.mongo.Admin(mongoose.connection.db);
      admin.buildInfo(function(err, info) {
        if (err) {
          console.err(`Error getting MongoDB info: ${err}`);
        } else {
          console.log(`Connection to MongoDB (version ${info.version}) opened successfully!`);
        }
      });
    })
    .catch((err) => console.error(`Error connecting to MongoDB: ${err}`));
}

module.exports = connect;

创建模型:

const mongoose = require('mongoose');

const userSchema = new mongoose.Schema({...});

module.exports = mongoose.model('User', userSchema);

答案 7 :(得分:0)

根据mongoose documentation,这就是useMongoClient的设置方式。

function connectDatabase(databaseUri){
    var promise = mongoose.connect('mongodb://localhost/myapp', {
        useMongoClient: true,
    });
    return promise;
}

答案 8 :(得分:0)

最简单的解决方法:

通过终端在项目根文件夹中运行此命令:

npm remove mongoose

npm install mongoose@4.10.8 --save

问题解决了。

升级并不总是最好的选择。

https://github.com/Automattic/mongoose/issues/5399

答案 9 :(得分:0)

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/starbucks', { 
    useMongoClient: true 
});
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('openUri', function() {
    // we're connected!
});

答案 10 :(得分:0)

错误:

(节点:1652)弃用警告:<div class="row" ng-repeat="post in this.posts"> <img src="{{post.img}}" alt="First sample image"> <h6 class="pb-1"><i class="{{post.icon}}"></i> {{post.category}}</h6> <h4 class="mb-4"><strong>{{post.title}}</strong></h4> <p>{{post.content}}</p> <p>by <a>{{post.title}}</strong></a>,{{post.date}}</p> </div> 在mongoose&gt; = 4.11.0中已弃用,请改用open(),或者如果使用openUri()则设置useMongoClient选项或connect()

解决方案:在连接属性中设置 useMongoClient:true

createConnection()

参见http://mongoosejs.com/docs/connections.html#use-mongo-client 现在正在听取请求

答案 11 :(得分:-1)

升级猫鼬,首先您需要使用以下代码将其卸载:

npm uninstall mongoose

然后使用以下代码再次安装:

npm install mongoose  --save

答案 12 :(得分:-2)

使用Typescript对我有用:

var dbOpt : any = { 
    useMongoClient: true
} 
mongoose.connect(dbURI, dbOpt);