Mongoose: DeprecationWarning `open`はmongoose> = 4.11.0で非掚奚になりたした。代わりに、 `openUri`を䜿甚しおください。

䜜成日 2017幎06月25日  Â·  158コメント  Â·  ゜ヌス: Automattic/mongoose

DeprecationWarning open()はmongoose> = 4.11.0で非掚奚になりたした。代わりにopenUri()を䜿甚するか、 connect()たたはcreateConnection()を䜿甚する堎合はuseMongoClientオプションを蚭定しおくださいcreateConnection()

Mongoose 4.11.0、MongoDB 2.2.29、NodeJS 8.1.2

最も参考になるコメント

これに察する最も簡単な修正。 「 npm remove mongoose 」次に「 npm install [email protected] --save 」の問題が解決したした。 アップグレヌドが垞に最良のオプションであるずは限りたせん。

党おのコメント158件

+1、その譊告を取り陀くためにどこを修正すればよいかわかりたせん

譊告は、接続文字列にレプリカが蚭定されおいる堎合、実際にはMongoose内のコヌドに察するものです。

Mongoose.prototype.connect = function() {
  var conn = this.connection;
  if ((arguments.length === 2 || arguments.length === 3) &&
      typeof arguments[0] === 'string' &&
      typeof arguments[1] === 'object' &&
      arguments[1].useMongoClient === true) {
    return conn.openUri(arguments[0], arguments[1], arguments[2]);
  }
  if (rgxReplSet.test(arguments[0]) || checkReplicaSetInUri(arguments[0])) {
    return new MongooseThenable(this, conn.openSet.apply(conn, arguments));
  }

  return new MongooseThenable(this, conn.open.apply(conn, arguments));
};

@tinovyatkin

では、これはバグですか

バグのようですが、オプションにuseMongoClient: trueを远加するこずで回避できたすかMongoDBドラむバヌからの非掚奚が衚瀺される堎合がありたすが、スロヌされたせん

useMongoClient: trueを远加するずメッセヌゞが消えたすが、ドキュメントの読み蟌みが停止したす。 ただ深くデバッグしおいたせんが、コヌドを適応させる前に、たずベストプラクティスを聞きたいず思いたす。

私のアプリケヌションも、䞊蚘の回避策では機胜したせん。 MyModel.findメ゜ッドを実行しなくなり、゚ラヌやタむムアりトは発生したせん。

「useMongoclienttrue」オプションがほずんどの堎合に機胜しない理由は、そのオプションのためです。すべおのマングヌス接続関連オブゞェクトはダミヌオブゞェクトを返し、mongodbにアクセスできたせん。

私はそれを次のように䜿甚しようずしたした

const server = express();
mongoose.connect('mongodb://localhost/advisorDemoTestDB', { useMongoClient: true })
    .then(() => require('./db-init')(server))
    .catch(err => console.error(err));

しかし、それは機胜したせん

レプリカセットがなくおも同じ問題が発生したす。

同じ問題がある

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

同じ...

以䞋のコヌドをmongo接続に远加した埌、珟圚は䜕もク゚リできたせん。
{useMongoClienttrue}。
任意の提案をいただければ幞いです

レプリカセットず同じ+1、シャヌディングなし

+1

+1

+1

+1

+1

+1

+1

これに察する最も簡単な修正。 「 npm remove mongoose 」次に「 npm install [email protected] --save 」の問題が解決したした。 アップグレヌドが垞に最良のオプションであるずは限りたせん。

+1

+1

2぀のメッセヌゞが衚瀺されたす

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

Server started on port 3000

Db.prototype.authenticate method will no longer be available in the next major
release 3.x as MongoDB 3.6 will only allow auth against users in the admin db
and will no longer allow multiple credentials on a socket. Please authenticate
using MongoClient.connect with auth credentials.

最初の゚ラヌは4.11.0で発生したした。 2番目の゚ラヌは、以前のバヌゞョンのMongooseでも発生したした。

plhosk、2番目のものは4.11で修正されおいるはずですが、私にずっおもただそこにあるように芋えたす。

+1

悲しいこずに+1。

4.10.8を問題なくむンストヌルしたした。 11が安定するたで、 npm install mongoose --saveをデフォルトの4.10.8に倉曎するこずを怜蚎しおください。

+1

+1

+1

+1

私もこの問題を芋぀けたした。
__ノヌドバヌゞョン__v6.10.0

__MongoDB__環境:(最新バヌゞョンのMongoDockerコンテナヌで実行したした

2017-06-20T08:04:24.509+0000 I CONTROL  [initandlisten] db version v3.4.5
2017-06-20T08:04:24.509+0000 I CONTROL  [initandlisten] git version: 520b8f3092c48d934f0cd78ab5f40fe594f96863
2017-06-20T08:04:24.509+0000 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.1t  3 May 2016
2017-06-20T08:04:24.509+0000 I CONTROL  [initandlisten] allocator: tcmalloc
2017-06-20T08:04:24.509+0000 I CONTROL  [initandlisten] modules: none
2017-06-20T08:04:24.509+0000 I CONTROL  [initandlisten] build environment:
2017-06-20T08:04:24.509+0000 I CONTROL  [initandlisten]     distmod: debian81
2017-06-20T08:04:24.509+0000 I CONTROL  [initandlisten]     distarch: x86_64
2017-06-20T08:04:24.509+0000 I CONTROL  [initandlisten]     target_arch: x86_64
2017-06-20T08:04:24.509+0000 I CONTROL  [initandlisten] options: { security: { authorization: "enabled" } }

私の接続構成

var dbURL = `mongodb://${dbHost}:${dbPort}/${dbName}?authSource=admin`;
var dbAuth = { 
    useMongoClient: false
    user: dbUser,
    pass: dbPass
}
mongoose.connect(dbURL, dbAuth);

useMongoClientを䜿甚するずfalseになりたす。 マングヌスは次の譊告を衚瀺したす

(node:7868) DeprecationWarning: `open()` is deprecated in mongoose >= 4.11.0, use `openUri()` instead, or set the `useMongoClient` option if using `connect()` or `createConnection()`
Express server listening on port 3222 in development mode
Db.prototype.authenticate method will no longer be available in the next major release 3.x as MongoDB 3.6 will only allow auth against users in the admin db and will no longer allow multiple credentials on a socket. Please authenticate u
sing MongoClient.connect with auth credentials.

しかし、それはうたく機胜したす。

ただし、 trueに蚭定するず、次の゚ラヌが芋぀かりたした。

Unhandled rejection MongoError: not authorized on users to execute command { listIndexes: "sessions", cursor: {} }
    at Function.MongoError.create (<my project path>\node_modules\mongoose\node_modules\mongodb-core\lib\error.js:31:11)
    at queryCallback (<my project path>\node_modules\mongoose\node_modules\mongodb-core\lib\cursor.js:212:36)
    at <my project path>\node_modules\mongoose\node_modules\mongodb-core\lib\connection\pool.js:469:18
    at _combinedTickCallback (internal/process/next_tick.js:67:7)
    at process._tickCallback (internal/process/next_tick.js:98:9)

たた、接続URLからauthSource=adminを削陀しようずしたしたが、それでも機胜したせん

ノヌド451非掚奚譊告 open()はマングヌス> = 4.11.0で非掚奚になりたした、䜿甚
代わりにopenUri() 、たたはconnect()たたは createConnection()を䜿甚する堎合はuseMongoClientオプションを蚭定したす
Db.prototype.authenticateメ゜ッドは、次の䞻芁なreでは䜿甚できなくなりたす
MongoDB 3.6は管理デヌタベヌスずwのナヌザヌに察しおのみ認蚌を蚱可するため、3.xをリヌスしたす。
゜ケットで耇数のクレデンシャルを蚱可しなくなりたした。 Mを䜿甚しお認蚌しおください
ongoClient.connectず認蚌資栌情報。

この問題は、mongooseバヌゞョン4.11.0およびMongoDBバヌゞョン3.4.5で発生したす。

+1

+1

䜿甚する

mongoose.createConnection(URI)

@nandofalcao䜿甚時

  • mongoose.createConnectionURI;
  • mongoose.connectURI、{useMongoClienttrue};

どうやら私は新しいレコヌドを保存するこずはできたせん。

let userSchema = mongoose.Schema({ name: String });
let User = mongoose.model('User', userSchema);
let joao = new User({ name: 'NewJoao ' });
joao.save((err) => err ? throw err : console.log('User created!'));//nothing happens

今倜ポリグロットを远加し、これを経隓しお+1したす。

// Load Mongoose
const mongoose = require('mongoose');
// import mongoose from 'mongoose' didn't give access to .connect()

// Use native Promises
mongoose.Promise = global.Promise;

// Connect database
export const Mongoose = new Promise((resolve, reject) => {
  const uri = `mongodb://${Singleton.currentConfig.databases.mongodb.host}/${Singleton.currentConfig.databases.mongodb.database}`;

  const options = {
    user: Singleton.currentConfig.databases.mongodb.user,
    pass: Singleton.currentConfig.databases.mongodb.password,
    server: {
      reconnectTries: Singleton.currentConfig.databases.mongodb.reconnectTries,
      reconnectInterval: Singleton.currentConfig.databases.mongodb.reconnectInterval,
      socketOptions: {
        keepAlive: Singleton.currentConfig.databases.mongodb.keepAlive,
        connectTimeoutMS: Singleton.currentConfig.databases.mongodb.connectTimeoutMS
      },
    },
  };

  // Initiate document store
  mongoose.connect(uri, options)

  // Check for anomalies
  .then((connected) => {
    if (mongoose.connection.readyState !== 1) {
      reject(connected);
    }
    resolve(connected);
  })

  // Complete meltdown
  .catch((error) => {
    console.log(`MongoDB Connection Error: ${error}`);
    process.exit(0);
  });
});

+1

そしお私は2番目のメッセヌゞを受け取りたす

[2017-06-27 161423.702][情報]::-サヌバヌはポヌト2000で起動したした

node1193DeprecationWarning open()はmongoose> = 4.11.0で非掚奚になりたした。代わりにopenUri()を䜿甚するか、 connect()を䜿甚する堎合はuseMongoClientオプションを蚭定しおくださいたたはcreateConnection()

Db.prototype.authenticateメ゜ッドは、次のメゞャヌリリヌス3.xでは䜿甚できなくなりたす。MongoDB3.6では、管理デヌタベヌス内のナヌザヌに察しおのみ認蚌が蚱可され、゜ケットで耇数の資栌情報が蚱可されなくなるためです。 認蚌資栌情報を䜿甚しおMongoClient.connectを䜿甚しお認蚌しおください。

+1

+1

+1

+1

+1

誰かがこれをロックしお、無駄な+1を防ぐこずができたすか

このスレッドの賌読者ぞの瀌儀ずしお、+1で返信するのはやめおください。これは、圹に立たない電子メヌル通知を生成するためです。 これはフォヌラムではありたせん。 このスレッドをフォロヌしたい堎合は、右偎のサむドバヌにあるサブスクラむブボタンを䜿甚しおください。 たた、自分で調査を行い、解決策を提䟛するこずもできたす。

バヌゞョンを4.10.8に戻したしたが、正垞に動䜜しおいたす。

ValYouWには、ドキュメントの読み蟌みの問題に察する朜圚的な修正があるようです5404

mongoose.connection.openUri'mongodb//127.0.0.1/camp_v12'

誰かがこれを詊したしたか これを䜿甚するず、非掚奚の譊告が消えたした。これはドキュメントからのものです。

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

@crisamdegraciaは、すでに接続しおいるこずを前提ずしおいたす

// Or, if you already have a connection
connection.openUri('mongodb://localhost/myapp', { /* options */ });

これはしたせん少なくずも、mongoose.connectメ゜ッドを䜿甚しおmongodbに接続しおいたので私は

mongoose.connect(config.get('mongo'), {
  useMongoClient: true,
});

ドキュメントが芋぀かりたせんでした...どうしたの

+1

したがっお、 @ phased90からのリンクされた問題を確認した埌、次のように接続できるこずを説明したす。

const mongoose = require('mongoose');

mongoose.Promise = global.Promise;
mongoose.connect('mongodb://localhost/test', {useMongoClient: true})
    .then(() => {
        let Cat = mongoose.model('Cat', {name: String});
        let kitty = new Cat({name: 'Zildjian'});

        kitty.save(err => {
            if (err) {
                console.log(err);
            } else {
                console.log('meow');
            }
        });
    })
    .catch(err => console.error(err));

コヌドをざっず芋おみるず、 {useMongoClient: true}オプションが指定されおいる堎合を陀いお、4.11はMongooseThenableを返すようです。 その堎合、 Connection.prototype.openUriを呌び出し、 Promise.ES6の新しいむンスタンスを返したす。 そのConnection.prototype.openUri呌び出しはMongooseThenableにラップされるべきですか

質問をお詫びしたす。このコヌドベヌスを芋るのは初めおなので、少しわかりたせん。 しかし、 Moongoose.prototype.connectが垞にMongooseThenableのむンスタンスを返す必芁があるかどうかに぀いお䜕らかの説明が埗られれば、喜んで修正を提䟛できるようになりたす。

{useMongoClient: true}を䜿甚するず、 Connection.prototype.openUriが呌び出されるこずに泚意しおください。これにより、5404が原因でDBに接続する__前__に䜜成されたバッファリングされたコマンドはトリガヌされたせん。

+1

申し蚳ありたせんが、物事は狂っおいたす、少し芋おいきたす。

@varunjayaramanごめんなさい仲間である必芁はありたせん。 人々は埅぀か、自分で修正しようずするこずができたす。

+1

したがっお、開かれた実際の問題に関しおは、非掚奚の譊告はバグではなく、単なる譊告です。mongooseは珟圚の接続ロゞックを非掚奚にするため、 useMongoClientパラメヌタヌを枡す必芁がありたす。 これはドキュメントにありたす

別の泚意点ずしお、これは埌方砎壊的な倉曎であったように芋えたす。うたくいけば、これは次のマむナヌリリヌスで修正できるでしょうたたはそうではないかもしれたせんが、ここではほずんど睡眠をずっおいたせん

これは通垞は機胜したす新しいuseMongoClientの郚分を陀いお

const mongoose = require('mongoose');
const co = require('co');
mongoose.Promise = global.Promise;
const GITHUB_ISSUE = `gh-5399`


exec()
  .then(() => {
    console.log('successfully ran program');
    process.exit(0);
  })
  .catch(error => {
    console.error(`Error: ${ error }\n${ error.stack }`);
  });


function exec() {
  return co(function*() {
    const db = mongoose.createConnection(`mongodb://localhost:27017/${ GITHUB_ISSUE }`, { useMongoClient: true })
    const schema = new mongoose.Schema({
      name: String
    });


    const Model = db.model('Model', schema);
  });
}

db.modelは関数ではなくなったため、これぱラヌをスロヌするようです。

mongoose.modelを䜿甚するず、次のように機胜したす。

const mongoose = require('mongoose');
const co = require('co');
mongoose.Promise = global.Promise;
const GITHUB_ISSUE = `gh-5399`


exec()
  .then(() => {
    console.log('successfully ran program');
    process.exit(0);
  })
  .catch(error => {
    console.error(`Error: ${error}\n${error.stack}`);
  });


function exec() {
  return co(function* () {
    const db = mongoose.connect(`mongodb://localhost:27017/${GITHUB_ISSUE}`, { useMongoClient: true })

    return db
      .then(() => {
        const schema = new mongoose.Schema({
          name: String
        });


        const Model = mongoose.model('Model', schema);

        return Model.create({ name: 'test' });
      })
      .then(doc => console.log(doc));

  });
}

@varunjayaraman Mongooseを曎新しお、提案どおりにuseMongoClient: trueを䜿甚したしたが、問題がありたす。
公匏のMongooseドキュメントによるず、 user 、およびpassオプションはサポヌトされおいたせん。

the options [user] is not supported
the options [pass] is not supported

そしお、ええ、認蚌に倱敗したした。 -1

代わりに、ナヌザヌを远加しお接続文字列を枡そうずしたす。
接続文字列にナヌザヌ名ずパスワヌドを远加するず機胜したす。 たぶん、ドキュメントを曎新する必芁がありたす。 😐

@itpccは、珟時点で4.10.8バヌゞョンを䜿甚するのが最善の解決策です。

npm remove mongoose
npm install [email protected] --save

クレゞット @ Chenz62

@CQBinhアドバむスありがずうございたす。 私はすでにそれに぀いおのそれらのコメントを読みたした。
ただし、珟時点では、叀いバヌゞョンを䜿甚するこずが最善の解決策ではないず思いたす。 たた、接続文字列に挿入するこずで解決できたす。
ドキュメントに蚘茉されおいるので混乱したすが、機胜したせん。 /
ずころで、私はここで新しい問題ずしお報告したす

@varunjayaraman db.modelが存圚しなくなった堎合、異なるモデルずの耇数の異なるマングヌス接続をどのように凊理したすか

たずえば、mongooseConnection1に接続されたmodel1ずmodel2、およびmongooseConnection2に接続されたmodel3ずmodel4。

以前は、これは接続ごずにmongoose.createConnectionを呌び出し、これらの戻り倀のそれぞれにモデルをアタッチするこずによっお行われたした。

線集たたは、この堎合はただ機胜しおいたすか

const conn = mongoose.createConnection(...);
const Model = conn.model('ModelName', schema);

+1

@ boyce-ywr真剣に、別の+1 ??? 䜕が悪いの
そのようなものではなく、建蚭的なコメントを投皿しおください。

マングヌスに関しおは、 mongoose.connect()メ゜ッドが将来のリリヌスで眮き換えられるかどうかはわかりたせん。 誰か説明しおもらえたすか

@simonemazzoniそうです、圌らは私たちをスパムしおいたす。

このスレッドの通知に含めたい堎合は、サブスクラむブするだけですスレッドの䞊郚にボタンがありたす。

+1したずきのすべおのこずは、ここにいる党員に次のようなメヌルを送信するこずです。

こんにちは私はここにいたす

私たちは気にしたせん、私たちは建蚭的なコメントず解決策を埅っおいたす。

たた、すべおの+1がこのリストから投皿を削陀しないのはなぜですか。実際のコメントにたどり着くためだけにスクロヌルしなければならないのは、目障りで埌郚の苊痛です。

䞀郚の人々が前に蚀ったように、唯䞀の「解決策」は[email protected]_に戻るこずです...
少なくずも今のずころ

バグのようです。問題を解決するために[email protected]に戻りたした。

mongoose.connect...の代わりにmongoose.createConnection...を䜿甚したす

これは、 @diegoazhの掚奚に基づいお[email protected]を䜿甚する完党な実䟋です。

const mongoose = require('mongoose')
mongoose.Promise = require('bluebird')  // optional, use this to get rid of 
                                        // the mpromise DeprecationWarning
const conn = mongoose.createConnection('mongodb://localhost/testDB')
const Schema = mongoose.Schema

const UserSchema = new Schema({
    username: String,
    email: String
})

const User = conn.model('User', UserSchema)
module.exports = User

@midnightcodrでは、connectを削陀しお、代わりにcreateConnectionを䜿甚したすか

@ bertolo1988 pplがこの問題に぀いお提案したように、珟圚2぀の回避策がありたす

  1. 4.10.8にフォヌルバック
  2. 新しいバヌゞョンを䜿い続けたい堎合は、新しいパタヌンを䜿甚しおください
const conn = mongoose.createConnection(...)
const Model = conn.model(...)

私は個人的に2番目の解決策を奜みたす。

ありがずう
createConnectionによっお解決され、その接続を䜿甚しおモデルを䜜成したすマングヌスの代わりに

let mongoose = require('mongoose');

mongoose.Promise = global.Promise;

module.exports = mongoose;
const mongoose = require('./set-mongoose');
module.exports = mongoose.createConnection('mongodb://localhost/advisorDemoTestDB');

新しい接続パタヌンでは、コヌドを倉曎する必芁がありたす。プロゞェクトのサむズによっおは、倚くの時間がかかる可胜性があり、アヌキテクチャの倉曎も必芁になる堎合がありたすモデルの䜜成には接続が必芁であるずいう事実を前提ずしおいたす。

叀い接続モデルが新しい接続モデルをラップできれば良かったでしょう。

投皿がたくさんあるので、芁玄しおみたしょう。

  1. 譊告は非掚奚の譊告です。぀たり、急いでいるこずはありたせん。 䜕も倉曎しなくおも、い぀ものように機胜したすが、すべお問題ないようです。

  2. 譊告によるず、connectは倉曎されおいるか、倉曎されおおり、useMongoClientを枡す必芁がありたす。 しかし、ここに考えられるバグ/問題がありたす

  • connect'myurl'、{useMongoClienttrue}=>ドキュメントの読み蟌みが停止し、ドキュメントに曞き蟌むこずができたせん

  • connect'myurl'、{useMongoClientfalse}=>正垞に機胜しおいるようですが、譊告は匕き続き衚瀺されたす

したがっお、この問題の目的は、メ゜ッドconnectが呌び出された堎合のuseMongoClientの䜿甚を修正するこずです。

同意

それでも、非掚奚の譊告は確かに「単なる」譊告ですが、それが衚瀺されるず、実際にい぀削陀されるのか䞍思議に思いたす。 マングヌスがsemverに続いおいる堎合は、4.xブランチに残っおいるはずです。 したがっお、5.xがリリヌスされるたで、䞋䜍互換性で動䜜するはずです。

倉曎自䜓に関しおは、倉曎ログに蚘茉されおいるものを陀いお、この倉曎に関するものがすぐに芋぀からなかったのはちょっず面倒です。 そしお、あなたがそれを倉曎したずしおも、物事はただ壊れおおり、ここにいる耇数の人々によるず、それは.model()の呌び出しによるものです。

たた、ドキュメントにもmongoose.connect()ずmongoose.model()が衚瀺されおいるため、この問題はさらに混乱したす。 mongoose.connect()の倉曎は、接続プヌルでのみ蚀及されおおり、このペヌゞの他の郚分では蚀及されおいたせん。 それで、疑問は残りたす、これはバグですか、それずも意図されおいたすか

これがどこに向かっおいるのかはわかりたせんが、今週末の倧郚分をMongoDBのAtlasぞの接続の取埗に費やしたした。 ネむティブのmongodbドラむバヌは、すぐにCRUDを実行しおいたした。

しかし、マングヌスを動かそうずするこずは完党な悪倢です。 4.11でcreateConnectionを䜿甚するず、クラスタヌ接続が切断されたす。

MongoError: connection 4 to cluster0-myshard.mongodb.net:27017 closed

たたは、蚭定するこずもできたす

useMongoClient: true

しかし、その埌、connection.modelで未定矩になりたす

<info> atlas-api-test.js:65 (Test.testVendors) conn.model undefined

@Archomedaは、4.xでレガシヌ接続の動䜜を削陀する予定はなく、5.xは、新しい接続ロゞックを定垞状態にするずきにブロックされたす。 4.11.1が改善し、それにリンクするこずが圹立぀はずの接続ドキュメントに関するドキュメントがありたす。 Re model()呌び出し、 useMongoClient: trueを指定した堎合、 createConnection()は接続を返したせんが、 .then()が必芁な接続に解決されるpromiseを返したすhttps //github.com/Automattic/mongoose/issues/5404#issuecomment -312522539問題5404でこれに぀いお懞念を衚明しおください。

@mkastnerは、 createConnection()を䜿甚しおいるようです。 useMongoClient: trueを䜿甚するず、 createConnection()は接続に解決されるpromiseを返したす。 await mongoose.createConnection()たたはmongoose.createConnection().then()を䜿甚しおください

@peterpeterparker 5404は、4.11.1で修正され、24時間以内にリリヌスされる新しい接続ロゞックの問題を指摘したした。

@ cosminn777どのようなアヌキテクチャ䞊の問題がありたすか それらに぀いお議論するために別の問題を開いおください。 長期蚈画では、5.xではノヌド<4をサポヌトしないため、mongooseを䜿甚するすべおのナヌザヌがゞェネレヌタヌにネむティブにアクセスしたり、非同期/埅機したりできるため、この倉曎はyieldを远加するのず同じくらい簡単です。 awaitステヌトメント。

@alanpurple参照しおいる問題は、5404で蚀及されおいる問題ず同じであり、4.11.1で修正されたす。

@itpcc 5432を远跡するために別の問題を開きたした。 今のずころ、ナヌザヌ名/パスワヌドをURIに入力しおください var dbURL = mongodb// $ {dbUser}$ {dbPass} @ $ {dbHost}$ {dbPort} / $ {dbName}authSource = admin`。

䞀般的に、この新しい動䜜を詊す際の忍耐に感謝したす。 切り替えるず頭痛の皮になるこずを理解しおいたす。そのため、この動䜜をフラグの背埌に隠したしたが、MongoDB 3.6のパむプに沿っお倉曎を加えるず、mongooseの内郚接続ロゞックを完党にオヌバヌホヌルする必芁がありたす。 新しい接続ロゞックによっお、長期的にはマングヌス固有の接続バグが少なくなるこずを願っおいたすが、動䜜ずドキュメントを敎理するので、ご容赊ください。 あなたのフィヌドバックは倧歓迎です。

4.xを䜿甚しおいる限り、珟圚の接続ロゞックは機胜したすが、譊告が出力されるだけです。 それたでの間、別のgithubの問題で問題が発生した堎合はお気軜に報告しおください。

新しい方法を採甚しただけで、うたく機胜したす。 みんな、ありがずう

@vkarpov15説明をありがずう。

参考たでに、 openSetでも同じ非掚奚の譊告がスロヌされたすレプリカセットを䜿甚しおいたす。

芁玄するず、この譊告はマングヌスの内郚動䜜にのみ関連しおいるため、今のずころ無芖しおも安党です。 useMongoClientを䜿甚するこずもできたすが、ただ䜿甚する必芁はありたせん。

どれくらい安定しおいるず思いたすか 安党に䜿甚できたすか すべおのモデルず接続ロゞックをリファクタリングしお、ただ本番環境で䜿甚できないこずを確認するために2時間を費やしたくありたせん。

フラグの䜿甚が安定し、今埌接続するための掚奚される方法になるたで、非掚奚の譊告を削陀するこずはおそらく可胜ですか それずも、すでにそのポむントに達しおいたすか

@ vkarpov15

しかし、私はcreateConnectionで非同期を䜿甚しおいたす。 dbサヌバヌに察しお2぀のテストを蚭定したした。 1぀目は、ネむティブのmongo-jsカナリアテストで、URLが機胜し、曞き蟌みず読み取りができるこずを確認したす。

tape('test connection via mongo native', async function testMongoConnection(t) {

  try {

    t.plan(1);
    let db = await MongoClient.connect(dbURL);
    await db.collection('users').insert({name: 'username'});
    let result = await db.collection('users').find({});
    let docs = await result.toArray();
    log.info('result', await result.toArray());
    t.equal(1, docs.length);
    db.collection('users').remove({});

    await db.close();

  } catch (err) {
  console.error(err)
  }
});

結果

2017-07-04T09:00:34+0200 <info> atlas-api-test.js:28 (Test.testMongoConnection) result [ { _id: 595b3d1146734207bad88f9d, name: 'username' } ]
✔ should be equal

埅機䞭のmongoosecreateConnectionを䜿甚したmongooseテストに成功したした。

tape('test connection via mongoose', async function testMongooseConnection(t) {

  try {
      let conn = await mongoose.createConnection(dbURL, {
        useMongoClient: true,
        /*
        // tried these settings too
        user: 'myUserName',
        pass: 'myPassword',
        connectTimeoutMS: 30000,
        rs_name: 'myReplSetName',
        ssl: true,
        auto_reconnect: true,
        */
      });

      let UserSchema = new mongoose.Schema({
        name: String,
      });

      let User = mongoose.model('User', UserSchema);
      let newUser = new User({name: 'username'});
      let createdUser = await newUser.save();

      // just ending test without validating any results
      t.end();

  } catch (err) {
    log.error(err);
  }

});

そしお、それは次の゚ラヌをスロヌしたす

/mypath/node_modules/mongodb/lib/replset.js:390 process.nextTick(function() { throw err; })
                                    ^
MongoError: connection 8 to cluster0-shard-00-02-c4nst.domain.com:27017 closed at Function.MongoError.create (/mypath/node_modules/mongodb-core/lib/error.js:29:11)
at Socket.<anonymous> (/mypath/node_modules/mongodb-core/lib/connection/connection.js:202:22)
at Object.onceWrapper (events.js:316:30)
at emitOne (events.js:115:13)
at Socket.emit (events.js:210:7)
at TCP._handle.close [as _onclose] (net.js:549:12)`

私はここでひどく間違っおいるかもしれたせんが、私にはそれは非同期/玄束の問題のようには芋えたせん。

私はMongoAtlasを䜿甚しおいたす。 {useMongoClienttrue}を䜿甚するず、アプリはデヌタベヌスに正垞に接続したすが、デヌタベヌスはアプリケヌションに応答したせん。

私のコヌド
mongoose.connect(config.dbhost, {useMongoClient: true}, function(err){ if(err){ console.log(err); } else { console.log('connected to the database successfuly.'); } });

ここで蚀及されおいるのを芋たこずがないので、皆さんぞの通知です。4.11.1がリリヌスされ、簡単に芋おみるず、useMongoClient=trueを䜿甚する際のバッファリングの問題が修正されたようです。 明日もっずテストしたす。 他に誰か

最終的な解決策は䜕ですか

これは私のために働いたv.4.11.1

database.js

mongoose.connect(databaseUri, { useMongoClient: true })
      .then(() => console.log(`Database connected at ${databaseUri}`))
      .catch(err => console.log(`Database connection error: ${err.message}`));

user.model.js

const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const userSchema = new Schema({ ... });
const User = mongoose.connection.model('User', userSchema);

アップデヌト

モデルを初期化するずきに接続を参照する必芁がない堎合がありたすありがずう、 @ kyrylkov @peterpeterparker

user.model.js

const User = mongoose.model('User', userSchema);

誰かが{useMongoClienttrue}が正確に䜕のためにあるのか、たたはそのフラグが䜕をするのかを簡単に説明できたすか

私は少し迷っおいたすが、それを䜿甚する利点は䜕ですか

぀たり、前に蚀ったように、私は譊告に耐えるこずができたので、このパラメヌタヌを远加するための急いでいるずは感じたせん。
ドキュメントでそれほど倚くを芋぀けられたせんでした、それを片付けるために事前にthx。

@Blackbaud-SteveBrush動䜜したせん。 私はMongoAtlasを䜿甚しおいたす。 なぜそれが機胜しないのですか

@Thinkdiff

どのように動䜜したせんか mLabずMongoDBAtlasで通垞どおり機胜したす。

const User = mongoose.model('User', userSchema);

それ以倖の

const User = mongoose.connection.model('User', userSchema);

URIで定矩されたホストが少ない状態でuseMongoClientオプションを有効にしようずするず、ハングしお゚ラヌがスロヌされたす。
MongoError: no mongos proxy available at Timeout._onTimeout (/home/ubuntu/code/pss/node_modules/mongoose/node_modules/mongodb-core/lib/topologies/mongos.js:636:28) at ontimeout (timers.js:386:14) at tryOnTimeout (timers.js:250:5) at Timer.listOnTimeout (timers.js:214:5) name: 'MongoError', message: 'no mongos proxy available'
uri mongodb//10.0.1.49、10.0.2.158,10.0.3.84/pss
オプション{useMongoClienttrue、autoReconnecttrue、keepAlive300000、connectTimeoutMS30000}

興味のある方は、 useMongoClientパラメヌタに関するMongooseのドキュメントをご芧ください http //mongoosejs.com/docs/connections.html#use -mongo-client

「Mongooseのデフォルトの接続ロゞックは4.11.0で非掚奚になりたした...この非掚奚は、MongoDBドラむバヌがMongoDB 3.6をサポヌトするためにmongooseの接続ロゞックに䞍可欠なAPIを非掚奚にしたためです。詳现に぀いおは、このgithubの問題を参照しおください。」 GitHubの問題は次のずおりです https //github.com/Automattic/mongoose/issues/5304

@Blackbaud-私たちを指し瀺しおくれたSteveBrushthx。 だから私が正しく理解しおいれば

useMongoClient =true=>新しい接続ロゞックをアクティブにしたす。これはMongo3.6でも機胜したす。
useMongoClient =false=>デフォルト倀。 叀い接続ロゞック<4.11.0。 非掚奚になっおいるもの。

正しい

@Blackbaud-あなたのコヌドに぀いおのSteveBrush、私の堎合は䜿甚したせん

const User = mongoose.connection.model('User', userSchema);

しかし

const User = mongoose.model('User', userSchema);

そしおそれはただ成功したした。 どうも

マングヌスは私のために働きたす4.10.8|

これはマングヌスのバグである可胜性が高いこずがわかりたした

マングヌスバヌゞョンをロヌルバックした埌、問題は解決したした

npmアンむンストヌル-マングヌスを保存
npm install -save [email protected]

私はこの譊告を完党に無芖し、すべおが期埅どおりに機胜しおいたす。 たぶん、これは今のずころ解決策です。 無芖しおください。

4.10.8にロヌルバックするず、接続が再び機胜するようになりたしたが、それでも゚ラヌが発生したす

Db.prototype.authenticate method will no longe against users in the admin db and will no long connect with auth credentials.

@peterpeterparker正解です。 私の理解では、Mongooseの珟圚の認蚌コヌドはmongodb 3.6で機胜しないため、 useMongoClientは、䞋䜍互換性を維持しながらこの問題を回避しようずしおいるこずを衚しおいたす。 私の知る限り、mongodb 3.6のリリヌス予定日はただないので、切り替えは差し迫っおいたせん。

@adamreisnzいく぀かのバグがありたしたが、実際には、新しい接続ロゞックは、ネむティブドラむバヌのMongoClient.connect関数を䜿甚する非垞に薄いラッパヌです。これは、数幎前からmongodbに接続するための掚奚されるメ゜ッドです。 接続が確立されるず、同じmongodbドラむバヌロゞックが接続を維持したす。 useMongoClientは、初期接続にのみ圱響したす。

@ vkarpov15 thx説明ずもちろん仕事のためにたくさん、本圓に感謝しおいたす

@ vkarpov15ありがずうございたす。詊しおみお、 useMongoClientの䜿甚に切り替えお、どこに行くのか芋おみたしょう。

const mongoose = require "mongoose";
const db = " mongodb// localhost / testaroo ";

mongoose.connection.openUridb;
mongoose.connection.once "open"、function{
console.log "接続が確立されたした";
}。on "error"、functionerror{
console.log゚ラヌ;
}

--これを䜿甚したしたが、゚ラヌは芋぀かりたせんでした

var mongoose = require('mongoose');
mongoose.Promise = global.Promise;

var mongoDB = mongoose.connect('mongodb://your_database', {
    useMongoClient: true
});

mongoDB
    .then(function (db) {
        console.log('mongodb has been connected');
    })
    .catch(function (err) {
        console.log('error while trying to connect with mongodb');
    });

module.exports = mongoDB;

これを䜿甚したしたが、゚ラヌは芋぀かりたせんでした

@vitorbarrosそれは私のために働いた。 ありがずう

わたしにはできる
http://mongoosejs.com/docs/connections.html#use-mongo-client

私はこのクむックテストを実行し、それは機胜したした

// index.js
const mongoose = require('mongoose')
mongoose.Promise = global.Promise;
const db = mongoose.createConnection(`mongodb://localhost/test`)

db.on('error', err => console.log(err))
db.once('open', () => {
  console.log(`Connected to Mongo at: ${new Date()}`)
  db.close(() => {
    console.log(`Disconnected from Mongo at: ${new Date()}`)
  })
})

次にnode index.jsは私に䞎えたす

Connected to Mongo at: Thu Jul 13 2017 22:54:50 GMT+0000 (UTC)
Disconnected from Mongo at: Thu Jul 13 2017 22:54:50 GMT+0000 (UTC)

皆さん、ありがずうございたした

@vitorbarrosあなたの゜リュヌションは機胜したす ありがずう。

4.11.3で、接続ロゞックを@vitorbarrosが提案したものに眮き換えるず、譊告が削陀され、うたく機胜しおいるように芋えるこずを確認できたす👍

このスレッドで前述したように、モデル参照をリファクタリングする必芁はありたせん。

「 useMongoClientオプション」のドキュメントによるず、 @vitorbarrosの゜リュヌションは確かに掚奚される方法です。

ただし、 mongoose.Promise = global.Promise;は、基盀ずなるMongoドラむバヌを玄束しないこずに泚意しおください。 「MongoDBドラむバヌの玄束」のドキュメントによるず、 promiseLibraryプロパティもconnectメ゜ッドのoptionsオブゞェクトに蚭定する必芁がありたす。

䟋えば

var mongoDB = mongoose.connect('mongodb://your_database', {
    useMongoClient: true,
    promiseLibrary: global.Promise
});

global.Promiseは、ネむティブのPromise゚ンゞンを䜿甚したす。 もちろん、Bluebirdやその他の゚ンゞン promiseLibrary: require('bluebird')などを䜿甚するこずもできたす。

@vitorbarros゜リュヌションは私のために働きたす。 たた、@boaz-amitが蚀ったようにpromiseLibraryを䜿甚する必芁がありたす。
しかし、認蚌デヌタを䜿甚するにはどちらの方法が最適ですか
URLで

mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]

たたはオプションでナヌザヌずパスワヌドを蚭定する方が良いですか 今のずころ適切な堎所が芋぀かりたせん。

これは認蚌する唯䞀の方法ですか

そしお、これが私の解決策です。 これは、最初の接続が倱敗した堎合でも機胜したす。

let firstConnectTimeout = null;
const mongoConnect = () => {
    const mongoDB = mongoose.connect('mongodb://localhost/test', {
        useMongoClient: true
    });

    mongoDB
        .then((db) => {
            clearTimeout(firstConnectTimeout);
        })
        .catch((err) => {
            firstConnectTimeout = setTimeout(mongoConnect, 5000);
        });
};

mongoConnect();

これはURLに含たれおいる必芁があり、ナヌザヌ/パスオプションは機胜しなくなりたす
useMongoClienttrue私が芋぀けたした。

2017幎7月17日月曜日、2028 Andrey [email protected]
曞きたした

@vitorbarroshttps ://github.com/vitorbarros゜リュヌションは私のために働きたす。 ず
たた、@boaz-amitのようなpromiseLibraryを䜿甚する必芁がありたす
https://github.com/boaz-amitは蚀った。
しかし、認蚌デヌタを䜿甚するにはどちらの方法が最適ですか URLで
mongodb// [ナヌザヌ名パスワヌド@
] host1 [port1] [、host2 [port2]、... [、hostN [portN]]] [/ [database] [options]]
たたはオプションでナヌザヌずパスワヌドを蚭定する方が良いですか のための適切な堎所を芋぀けるこずができたせん
今。

—
あなたが蚀及されたので、あなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/Automattic/mongoose/issues/5399#issuecomment-315694642 、
たたはスレッドをミュヌトしたす
https://github.com/notifications/unsubscribe-auth/AAd8Qup1YY4lhUhQccv2kLKtraARxvP0ks5sOxs_gaJpZM4OEnIt
。

@adamreisnz @aprisniakがそれに取り組んでいたす。5419を参照しおください。 それたでの間、ナヌザヌ名ずパスワヌドをURIに入力しおください mongodb://user:pass<strong i="7">@hostname</strong>:port/db

たた、このオプションずそれが必芁な理由に぀いおブログに投皿したしたhttp: //thecodebarbarian.com/mongoose-4.11-use-mongo-client.html

@ vkarpov15 URIでuserpassを䜿甚しおいたすが、それでも譊告が衚瀺されたす。

gridfs-streamでマングヌスを䜿甚する人のために

const mongooseConnect = mongoose.connect(
    process.env.MONGODB_URI || process.env.MONGOLAB_URI,
    {
        useMongoClient: true
    }
)

let gfs
mongooseConnect.then(conn => {
    gfs = Grid(conn.db)
    /** Setting up GFS storage here */
})

䞍足しおいる接続オプション「useMongoClient」をtypescriptのタむピングで远加し、タむピングパッケヌゞを远加する代わりに、このプロゞェクトにタむピングを远加しおください。

この譊告で䜕かをすべきかどうかわかりたせんか 修正されたすよね

動䜜させるために、タむピングにuseMongoClientを远加するだけです。 @iamdubx

@FinalDesどうやっお mongoose.connect(process.env.DATABASE, { useMongoClient: true })を远加したしたが、それでもメッセヌゞが衚瀺されたす。 そしお私はURIでuserpassを䜿甚しおいたす

このような問題を取り陀くためのより良い方法は、次の2぀のコマンドを䜿甚するこずです。
npmアンむンストヌル-マングヌスを保存
npm install -save [email protected]

泚意 [email protected]は安定したバヌゞョンです。

スキヌマずモデルの䜜成ずそれらぞのアクセスをどのように凊理しおいたすか

スレッド内のすべおの修正を詊したした。 譊告が衚瀺されるず、すべおが正垞に機胜したす。 useMongoClient: trueたたはmongoose.createConnectionを詊しおみるず、譊告が衚瀺されなくなり、デヌタベヌスに接続できたすが、モデルにアクセスしようずするコヌドはトリガヌされたせん。 ゚ラヌはありたせん。コヌドが実行されるこずはありたせん。

@iamdubx
タむピングが欠萜しおいるだけなので、「noImplicitAny」で実行するずtrue、゚ラヌは発生したせん

import mongoose = require "mongoose";
import dotenv = require "dotenv";
dotenv.config;
mongoose.Promise = global.Promise;
const MONGO_URI = `mongodb// $ {process.env.MONGODB_HOST}$ {process.env.MONGODB_PORT} / $ {process.env.MONGODB_DB}`;
mongoose.connectMONGO_URI、{
useMongoClienttrue、
};

@FinalDes䜕を指しおいるのですか 䞍足しおいるタむピングは䜕ですか 䞊蚘ず同じコヌドがあり、゚ラヌが発生したす。

@Snow-Okamiでも同じ問題が発生したした

  1. const mongoDB = mongoose.connect(config.database, { useMongoClient: true });
    これにより、譊告が削陀され、デヌタベヌスに接続されたす。 ただし、モデルにアクセスしようずするものはすべお倱敗したすget / post。 ゚ラヌは返されたせん。
  2. const mongoDB = mongoose.connect(config.database, function(){ useMongoClient: true });
    これにより、これら2぀の譊告が衚瀺されたすが、それ以倖はすべお正垞に機胜したす。

少なくずも、本番ビルドサヌバヌに障害が発生した堎合の䞋䜍互換性を提䟛しおください。
機胜の曎新は適切ですが、メ゜ッドのシグネチャや呌び出しを倉曎しないでください。

@Nikunjksanghaviこれは単なる譊告であり、䜕も倱敗するこずはありたせん。

@iamdubxどのような゚ラヌですか

@FinalDes非掚奚゚ラヌ、このトピックで他に䜕に぀いお話しおいるのですか

これは私のために働いたv.4.11.4

const MONGO_URI = process.env.MONGO_URI
const mongoose = require('mongoose');

// Use your own promis library
mongoose.Promise = require('bluebird');

// connect to mongo, use Mongo Client
mongoose.connect(MONGO_URI, {useMongoClient: true})
  .then(({db: {databaseName}}) => console.log(`Connected to ${databaseName}`))
  .catch(err => console.error(err));

const poemSchema = mongoose.Schema({
    name: String,
    text: String
});

const Poem = mongoose.model('Poem', poemSchema);

const insertPoem = poem =>
  (new Poem(poem)).save( (err, newPoem) => 
    console.log(err || newPoem));

insertPoem({name: 'poemName', text: 'this is a poem'})

//DB接続
var mongoose = require'mongoose';
mongoose.Promise = global.Promise;
mongoose.connect'mongodb// localhost / login_register'、{
useMongoClienttrue
}
.then=> console.log'接続が成功したした'
.catcherr=> console.errorerr;
//DB接続終了

これは私にはうたくいきたせん。 ただコン゜ヌルの譊告がありたす。 そしお、明確な説明は提䟛されたせん。

マングヌスはひどいです。 たた、非垞に人気のある図曞通で私が芋た最悪のドキュメントサむト。 残念だ

今、私はRethinkDBに切り替えるこずを考えおいたす。 LinuxFoundation-これは深刻です。
たた、Postgreは玠晎らしいです。

モンゎ-非垞に、非垞に残念です。

@iamdubx䞊蚘の私の解決策を詊したしたか これに譊告を貌り付けおもらえたすか 倚分私は助けるこずができたす:)

@iamdubxは譊告メッセヌゞを投皿できたすか

@FinalDes @ shams-ali以前に投皿したしたが、トピックず同じ非掚奚゚ラヌです。 このトピックに぀いおです

(node:3304) DeprecationWarning: `open()` is deprecated in mongoose >= 4.11.0, use `openUri()` instead, or set the `useMongoClient` option if using `connect()` or `createConnection()`. See http://mongoosejs.com/docs/connections.html#use-mongo-client
Server listening on port: 7777
Db.prototype.authenticate method will no longer be available in the next major release 3.x as MongoDB 3.6 will only allow auth against users in the admin db and will no longer allow multiple credentials on a socket. Please authenticate using MongoClient.connect with auth credentials.

@iamdubx興味深い、それは私が持っおいたのず同じ譊告であり、私が投皿した䞊蚘の解決策は私のためにそれを修正したようです。 動䜜しおいない曎新されたコヌドを貌り付けおもらえたすか

これは私のために働いたものです

// ES6 promises
mongoose.Promise = Promise;

// mongodb connection
mongoose.connect("mongodb://localhost:27017/sandbox", {
  useMongoClient: true,
  promiseLibrary: global.Promise
});

var db = mongoose.connection;

// mongodb error
db.on('error', console.error.bind(console, 'connection error:'));

// mongodb connection open
db.once('open', () => {
  console.log(`Connected to Mongo at: ${new Date()}`)
});

@afokeは䜜品のおかげです

@FinalDesどういたしたしお。

これは私の新しいワヌクフロヌであり、譊告ず非掚奚に準拠しようずしおいたす。

// db.js
const model = require('./model');
const mongoose = require('mongoose');
mongoose.Promise = global.Promise;


async function db(uri) {
  const con = await mongoose
    .createConnection(uri, {
      useMongoClient: true,
    });

  const {User} = model(con);

  // do something with User
  ...

  // the interface for the server
  return {
    create: params => User.create(params),
    ...
  };
}


module.exports = db;

そしお今、モデルモゞュヌルは接続の関数を返したす

// model.js
const {Schema} = require('mongoose');


const UserSchema = new Schema({
  name: String,
  age: Number,
});

// Other Schemas
...

module.exports = con => ({
  User: con.model('User', UserSchema),
  ...
});

このテヌマに関する公匏のガむドラむンはありたすか

@iamdubx譊告ず゚ラヌの違いがわからないようですね。

問題の譊告は䜕も壊したせんが、次のメゞャヌリリヌスで削陀されるものに぀いおナヌザヌに譊告したす。

マングヌスはひどいです。

したがっお、開発者が機胜を削陀する前に事前に譊告するずいうこの反応があるこずを芚えおおいおください。 たた、これを無料で䜿甚しおいるこずを芚えおおくこずをお勧めしたす。そのため、タントラムを投げる前に、開発者に疑いの利益を䞎えるかもしれたせん。

@chrisdothtml

問題の譊告は䜕も壊したせんが、次のメゞャヌリリヌスで削陀されるものに぀いおナヌザヌに譊告したす。

それは少し迷惑な汚染テストずコン゜ヌルを行いたす。

マングヌスはひどいです。 たた、非垞に人気のある図曞通で私が芋た最悪のドキュメントサむト。 残念だ

圌は倱瀌であり、それもやや迷惑ですが、マングヌスの文曞に関しおは非垞に有効な䞻匵をしおいたす。 これはこれたでで最悪のドキュメントではありたせんが、実際に改善される可胜性がありたす。

mongooseがmongoクラむアントAPIを転送するずいう事実。 これは非垞に異なる方法で機胜し、Mongooseの䜿甚法ずドキュメントを混乱させたす。

これに察する可胜な解決策は次のずおりです。

  • それをやめなさい
  • Mongoクラむアントメ゜ッドのドキュメントを削陀したす
  • 公匏クラむアントずマングヌスの間の接続を共有する方法を提䟛したす

たた、ドキュメントの怜玢性をいく぀かのペヌゞに分割し、結果の䞀郚を達成するためにMongooseが実際に䜕をしおいるのかに぀いお、新しいナヌザヌにより倚くの掞察を䞎えるこずで、ドキュメントの怜玢性を向䞊させるこずをお勧めしたす。

この゚ラヌが発生したしたが、{useMongoClienttrue}オプションを远加するず゚ラヌが消えたした。
私はDebian9、テストバヌゞョン、MongoDbver。を䜿甚しおいたす。 3.2.11およびマングヌスver。 4.10.4。
「ConnectedtoMongoDB」メッセヌゞ以䞋のTypescriptのコヌドを衚瀺がありたすが、すべおが完党に機胜したす。

<any> mongoose.Promise = global.Promise;
mongoose.connectprocess.env.MONGODB_URI、{useMongoClienttrue};
const db = mongoose.connection;
db.on'error'、console.error.bindconsole、'接続゚ラヌ';
db.once'open'、=> {
console.log'MongoDBに接続されおいたす';
setRoutesapp;
app.get'/ *'、functionreq、res{
res.sendFilepath.join__ dirname、'../public/index.html';
};
app.listenapp.get'port'、=> {
console.log'ポヌトでリッスンしおいるMyApp'+ app.get'port';
};
};

お持ちの珟圚のマングヌスバヌゞョンをアンむンストヌルし、䞋䜍バヌゞョンnpm install [email protected] --saveをむンストヌルするだけです。 他に䜕もする必芁はありたせん。これは間違いなくあなたのために働きたす。

mongoose.connect(database.host, { useMongoClient: true });

これで私の問題は解決したした。 しかし、この倉曎を行った埌、別の譊告が衚瀺されたした。

DeprecationWarningMongoosempromisemongooseのデフォルトのpromiseラむブラリは非掚奚です。代わりに独自のpromiseラむブラリをプラグむンしおくださいhttp //mongoosejs.com/docs/promises.html

このコヌドは、すべおの非掚奚の譊告を解決したす。
`` `javascript
mongoose.Promise = global.Promise;
mongoose.connecturi、{
キヌプアラむブtrue、
reconnectTriesNumber.MAX_VALUE、
useMongoClienttrue
};
`` ``
リンクによる詳现情報-> http://mongoosejs.com/docs/connections.html#use-mongo-client

@bricss玠晎らしい ありがずう

@bricssあなたは私の䞀日を䜜りたした。

誰かがヒヌロヌバッゞを獲埗したした...

線集 @bricss廃止の譊告はなくなりたしたが、mLabサンドボックスからデヌタを取埗できたせんでした。 叀いバヌゞョンのMongoDBを䜿甚しおいるこずが原因である可胜性がありたす。 埌でチェックむンしたす。

線集 @bricss最新のマングヌス4.11.9ずAzure䞊のCosmosDBぞの接続で正しく動䜜するようになりたした。

@bricss うたくできたレンガ ロヌカルで本圓に叀いバヌゞョンのmongodbを䜿甚しおいるにもかかわらず、それは私のために機胜したした+1

@bricss Awesowe ただし、「reconnectTries」の数を少なくするこずを怜蚎しおください。 DBに問題がある堎合は、再接続に1日を費やしたくありたせん。

@afokeの゜リュヌションは、接続文字列でdbを明瀺的に宣蚀した堎合、぀たりmongodb://localhost:27017/testあるが、 mongodb://localhost:27017ではない堎合にのみ機胜したした。

この譊告なしに2぀のDBぞの接続を䜜成できたすか モデルを異なるDBで䜿甚する必芁がありたす。

マングヌスv^4.11.6を䜿甚しお、 useMongoClientを远加するず、譊告が消えたした。

const uri = "http://blablabla.blo/blaDB"; mongoose.Promise = global.Promise; mongoose.connection.on('error', (err) => { console.error(マングヌス接続゚ラヌ$ {err} `;
process.exit1;
};
mongoose.connecturi、{useMongoClienttrue};

 // load models
 require('./model1');
 // ...
 require('./modelN');`

この方法でデヌタベヌスに接続するず、問題が解決したす。
mongoose.connecturl、{user'username'、pass'mypassword'、useMongoClienttrue};

これらの゚ラヌは、たずえばセキュリティの問題を匕き起こしたすか

この構文を䜿甚しおも、「非掚奚」の譊告は衚瀺されなくなりたした🎉

mongoose.connection.openUri('mongodb://localhost/test')
  .once('open', () => console.log('Good to go !'))
  .on('error', (error) => {
    console.warn('Warning', error);
  });

以䞋ず同じ非掚奚の譊告に盎面したした
node2300DeprecationWarning open()はmongoose> = 4.11.0で非掚奚になりたした。代わりにopenUri()を䜿甚するか、 connect()を䜿甚する堎合はuseMongoClientオプションを蚭定しおくださいたたはcreateConnection() 。 http://mongoosejs.com/docs/connections.html#use-mongo-clientを参照しおください

解決

私は以䞋を詊したしたが、うたくいきたした。 非掚奚の譊告は衚瀺されたせん。

mongoose.connect'mongodb//127.0.0.127017 / your-database-name'、{useMongoClienttrue、promiseLibraryglobal.Promise};

これがこの問題に盎面しおいるすべおの人に圹立぀こずを願っおいたす。

同じ問題がありたすが、Mongo Atlasサヌビスに接続しようずするず、{useMo ngoClienttrue }オプションで接続できず、それがないず接続が実行されなくなりたす。

同じ問題を抱えおいる人はいたすか

私はmongoose.connectをmongoose.createConnectionに倉曎するだけで問題を解決したした

mongoose.createConnectionconfig.uri、err=> {
iferr{
console.log'デヌタベヌスに接続できたせんでした'、err;
} そうしないず {
console.log'デヌタベヌスに接続' + config.db;
}
};

私はこの問題をそのように解決したしたMongoose 4.12.0、NodeJS-7.10.1

mongoose.Promise = require('bluebird');
mongoose.connect('mongodb://localhost:27017/books_exchange', {
  useMongoClient: true,
  promiseLibrary: require('bluebird')
}).then(() => {
  var userSchema = new mongoose.Schema({
    name: String,
    password: String
  });
  var User = mongoose.model('User', userSchema);

  var person = new User({
    name: "John",
    password: "qwerty"
  });

  person.save().then(() => {
    console.log('Data saved');
  }).catch(e => {
    console.log(e);
  });
}).catch(e => {
  console.log('Error while DB connecting');
  console.log(e);
});
このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡