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()

๋ชฝ๊ตฌ์Šค 4.11.0, ๋ชฝ๊ณ DB 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 ๋ฅผ ์˜ต์…˜์— ์ถ”๊ฐ€ํ•˜์—ฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

useMongoClient: true ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฉ”์‹œ์ง€๊ฐ€ ์‚ฌ๋ผ์ง€์ง€๋งŒ ๋‚ด ๋ฌธ์„œ๋Š” ๋กœ๋“œ๊ฐ€ ์ค‘์ง€๋ฉ๋‹ˆ๋‹ค. ๋” ๊นŠ์ด ๋””๋ฒ„๊น…ํ•˜์ง€๋Š” ์•Š์•˜์ง€๋งŒ ์ฝ”๋“œ๋ฅผ ์ ์šฉํ•˜๊ธฐ ์ „์— ๋จผ์ € ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ๋“ฃ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋‚ด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ์œ„์—์„œ ์ œ์•ˆํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ MyModel.find ๋ฉ”์„œ๋“œ๋ฅผ ๋” ์ด์ƒ ์‹คํ–‰ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์˜ค๋ฅ˜์™€ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

"useMongoclient: true" ์˜ต์…˜์ด ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ์— ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ํ•ด๋‹น ์˜ต์…˜์— ๋Œ€ํ•œ ๋ชจ๋“  mongoose ์—ฐ๊ฒฐ ๊ด€๋ จ ๊ฐœ์ฒด๊ฐ€ 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์—์„œ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ์˜ค๋ฅ˜๋Š” ์ด์ „ ๋ฒ„์ „์˜ ๋ชฝ๊ตฌ์Šค์—์„œ๋„ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค.

plhosk, ๋‘ ๋ฒˆ์งธ ๋ฌธ์ œ๋Š” 4.11์—์„œ ์ˆ˜์ •๋˜์–ด์•ผ ํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ €์—๊ฒŒ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

+1

์Šฌํ”„๊ฒŒ๋„ +1.

๋ฌธ์ œ ์—†์ด 4.10.8์„ ์„ค์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค. 11์ด ์•ˆ์ •๋  ๋•Œ๊นŒ์ง€ npm install mongoose --save ๋ฅผ ๊ธฐ๋ณธ๊ฐ’ 4.10.8๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค.

+1

+1

+1

+1

๋‚˜๋Š” ๋˜ํ•œ์ด ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ๋‹ค.
__๋…ธ๋“œ ๋ฒ„์ „__: v6.10.0

__MongoDB__ ํ™˜๊ฒฝ: (์ €๋Š” ์ตœ์‹  ๋ฒ„์ „์˜ Mongo ๋„์ปค ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค)

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 ๋ฅผ ๊ฑฐ์ง“์œผ๋กœ ์‚ฌ์šฉํ•  ๋•Œ. ๋ชฝ๊ตฌ์Šค๋Š” ๋‹ค์Œ ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

(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 ์„ ์ œ๊ฑฐํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

(node:451) DeprecationWarning: open() ๋Š” mongoose >= 4.11.0์—์„œ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ
openUri() ๋Œ€์‹  connect() ๋˜๋Š” createConnection() ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ useMongoClient ์˜ต์…˜์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
Db.prototype.authenticate ๋ฉ”์„œ๋“œ๋Š” ๋‹ค์Œ ์ฃผ์š” ๋ฒ„์ „์—์„œ ๋” ์ด์ƒ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
MongoDB 3.6์€ admin db ๋ฐ w์˜ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•ด์„œ๋งŒ ์ธ์ฆ์„ ํ—ˆ์šฉํ•˜๋ฏ€๋กœ ์ž„๋Œ€ 3.x
ill์€ ๋” ์ด์ƒ ์†Œ์ผ“์—์„œ ์—ฌ๋Ÿฌ ์ž๊ฒฉ ์ฆ๋ช…์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 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

๋‘ ๋ฒˆ์งธ ๋ฉ”์‹œ์ง€๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

[2017-06-27 16:14:23.702] [INFO] :: - 2000๋ฒˆ ํฌํŠธ์—์„œ ์„œ๋ฒ„ ์‹œ์ž‘

(node:1193) DeprecationWarning: open() ๋Š” mongoose >= 4.11.0์—์„œ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  openUri() ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ connect() ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ useMongoClient ์˜ต์…˜์„ ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค. ๋˜๋Š” createConnection()

Db.prototype.authenticate ๋ฉ”์„œ๋“œ๋Š” MongoDB 3.6์ด admin db์˜ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•ด์„œ๋งŒ ์ธ์ฆ์„ ํ—ˆ์šฉํ•˜๊ณ  ์†Œ์ผ“์—์„œ ๋” ์ด์ƒ ์—ฌ๋Ÿฌ ์ž๊ฒฉ ์ฆ๋ช…์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋‹ค์Œ ์ฃผ์š” ๋ฆด๋ฆฌ์Šค 3.x์—์„œ ๋” ์ด์ƒ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ธ์ฆ ์ž๊ฒฉ ์ฆ๋ช…์œผ๋กœ 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 ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ์ด ์ธ์Šคํ„ด์Šค์—์„œ Promise.ES6 ์˜ ์ƒˆ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” Connection.prototype.openUri ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น 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 ์กฐ์–ธ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๋ฏธ ๊ทธ๊ฒƒ์— ๋Œ€ํ•œ ๋Œ“๊ธ€์„ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ํ˜„์žฌ๋กœ์„œ๋Š” ์ด์ „ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ตœ์ƒ์˜ ์†”๋ฃจ์…˜์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์—ฐ๊ฒฐ ๋ฌธ์ž์—ด์— ์‚ฝ์ž…ํ•˜์—ฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฌธ์„œ์— ์–ธ๊ธ‰๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ˜ผ๋ž€์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. :/
BTW, ์—ฌ๊ธฐ ์— ์ƒˆ ๋ฌธ์ œ๋กœ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค.

@varunjayaraman db.model ๊ฐ€ ๋” ์ด์ƒ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ๋‹ค๋ฅธ ๋ชจ๋ธ๊ณผ์˜ ์—ฌ๋Ÿฌ ๋‹ค๋ฅธ ๋ชฝ๊ตฌ์Šค ์—ฐ๊ฒฐ์„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๊นŒ?

์˜ˆ๋ฅผ ๋“ค์–ด model1๊ณผ model2๋Š” mongooseConnection1์— ์—ฐ๊ฒฐ๋˜๊ณ  model3๊ณผ model4๋Š” mongooseConnection2์— ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

์ด์ „์—๋Š” ๊ฐ ์—ฐ๊ฒฐ์— ๋Œ€ํ•ด 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

@midnightcoder ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ์—ฐ๊ฒฐ์„ ๋Š๊ณ  ๋Œ€์‹  createConnection์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๊นŒ?

@bertolo1988 ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ œ์•ˆ๋œ ppl๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ˜„์žฌ ๋‘ ๊ฐ€์ง€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. 4.10.8๋กœ ๋Œ์•„๊ฐ€๊ธฐ
  2. ์ƒˆ ๋ฒ„์ „์„ ๊ณ„์† ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ƒˆ ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์„ธ์š”.
const conn = mongoose.createConnection(...)
const Model = conn.model(...)

๋‚˜๋Š” ๊ฐœ์ธ์ ์œผ๋กœ ๋‘ ๋ฒˆ์งธ ์†”๋ฃจ์…˜์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์‚ฌ ํ•ด์š”!!!
createConnection์œผ๋กœ ํ•ด๊ฒฐํ•˜๊ณ  ํ•ด๋‹น ์—ฐ๊ฒฐ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ธ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค( mongoose ๋Œ€์‹ ).

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}) => ๋ฌธ์„œ ๋กœ๋“œ๊ฐ€ ์ค‘์ง€๋˜๊ณ  db์— ์“ธ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  • connect('myurl', {useMongoClient: false}) => ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์ง€๋งŒ ๊ฒฝ๊ณ ๊ฐ€ ๊ณ„์† ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ด ๋ฌธ์ œ์˜ ๋ชฉ์ ์€ connect ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์‹œ useMongoClient ์‚ฌ์šฉ์„ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋™์˜ํ•˜๋‹ค?

์—ฌ์ „ํžˆ ์‚ฌ์šฉ ์ค‘๋‹จ ๊ฒฝ๊ณ ๋Š” ์‹ค์ œ๋กœ "๊ทธ๋ƒฅ" ๊ฒฝ๊ณ ์ด์ง€๋งŒ ํ•ด๋‹น ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋˜๋ฉด ์‹ค์ œ๋กœ ์–ธ์ œ ์ œ๊ฑฐ๋˜๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. mongoose๊ฐ€ 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() ์— ํ•„์š”ํ•œ ์—ฐ๊ฒฐ๋กœ ํ™•์ธ๋˜๋Š” ์•ฝ์†์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. https://github.com/Automattic/mongoose/issues/5404#issuecomment -312522539์— ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ #5404 ์—์„œ ์ด์— ๋Œ€ํ•œ ์šฐ๋ ค ์‚ฌํ•ญ์„ ์ž์œ ๋กญ๊ฒŒ ๋ง์”€ํ•ด ์ฃผ์‹ญ์‹œ์˜ค.

@mkastner ๋Š” createConnection() ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. useMongoClient: true ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด $ createConnection() ์—ฐ๊ฒฐ๋กœ ํ™•์ธ๋˜๋Š” ์•ฝ์†์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. await mongoose.createConnection() ๋˜๋Š” mongoose.createConnection().then() ์‚ฌ์šฉํ•˜์„ธ์š”.

@peterpeterparker #5404๋Š” 4.11.1์—์„œ ์ˆ˜์ •๋  ์ƒˆ๋กœ์šด ์—ฐ๊ฒฐ ๋กœ์ง์˜ ๋ฌธ์ œ์ ์„ ์ง€์ ํ–ˆ์œผ๋ฉฐ, ์ด๋Š” ํ–ฅํ›„ 24์‹œ๊ฐ„ ์ด๋‚ด์— ๊ณต๊ฐœ๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

@cosminn777 ์–ด๋–ค ์•„ํ‚คํ…์ฒ˜ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๋ณ„๋„์˜ ๋ฌธ์ œ๋ฅผ ์—ด์–ด ๋…ผ์˜ํ•˜์‹ญ์‹œ์˜ค. ์žฅ๊ธฐ ๊ณ„ํš์€ 5.x์—์„œ Node < 4๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ mongoose๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์ด ์ƒ์„ฑ๊ธฐ ๋ฐ/๋˜๋Š” async/await์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๊ฐ–๊ฒŒ ๋˜๋ฏ€๋กœ ์ด ๋ณ€๊ฒฝ์€ yield ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๋งŒํผ ์‰ฌ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. await ๋ฌธ.

@alanpurple ๋ง์”€ํ•˜์‹  ๋ฌธ์ œ๋Š” #5404์—์„œ ์–ธ๊ธ‰ํ•œ ๋ฌธ์ œ์™€ ๋™์ผํ•˜๋ฉฐ 4.11.1์—์„œ ์ˆ˜์ •๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

@itpcc #5432๋ฅผ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด ๋ณ„๋„์˜ ๋ฌธ์ œ๋ฅผ ์—ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ URI์— ์‚ฌ์šฉ์ž ์ด๋ฆ„/๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜์‹ญ์‹œ์˜ค. var dbURL = mongodb://${dbUser}:${dbPass}@${dbHost}:${dbPort}/${dbName}?authSource= ๊ด€๋ฆฌ์ž`.

์ผ๋ฐ˜์ ์œผ๋กœ ์ด ์ƒˆ๋กœ์šด ํ–‰๋™์„ ์‹œ๋„ํ•˜๋Š” ๋ฐ ์ธ๋‚ด์‹ฌ์„ ๊ฐ€์ ธ์ฃผ์‹  ๋ชจ๋“  ๋ถ„๋“ค๊ป˜ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ „ํ™˜ํ•˜๋ฉด ์•ฝ๊ฐ„์˜ ๊ณจ์นซ๊ฑฐ๋ฆฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ํ”Œ๋ž˜๊ทธ ๋’ค์— ์ด ๋™์ž‘์„ ์ˆจ๊ฒผ์ง€๋งŒ MongoDB 3.6์— ๋Œ€ํ•œ ์ผ๋ถ€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์œผ๋กœ ์ธํ•ด mongoose์˜ ๋‚ด๋ถ€ ์—ฐ๊ฒฐ ๋…ผ๋ฆฌ๋ฅผ ์™„์ „ํžˆ ์ ๊ฒ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ์—ฐ๊ฒฐ ๋กœ์ง์ด ์žฅ๊ธฐ์ ์œผ๋กœ mongoose ๊ด€๋ จ ์—ฐ๊ฒฐ ๋ฒ„๊ทธ๋ฅผ ์ค„์—ฌ์ฃผ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋™์ž‘๊ณผ ๋ฌธ์„œ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋™์•ˆ ์–‘ํ•ดํ•ด ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ํ”ผ๋“œ๋ฐฑ์€ ๋Œ€๋‹จํžˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

4.x์— ์žˆ๋Š” ํ•œ ํ˜„์žฌ ์—ฐ๊ฒฐ ๋…ผ๋ฆฌ๋Š” ์ž‘๋™ํ•˜์ง€๋งŒ ๊ฒฝ๊ณ ๋งŒ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ๋™์•ˆ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๋ณ„๋„์˜ github ๋ฌธ์ œ๋ฅผ ๋ณด๊ณ ํ•ด ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋ฐฉ๊ธˆ ์ƒˆ๋กœ์šด ๋ฐฉ๋ฒ•์„ ์ฑ„ํƒํ–ˆ๊ณ  ํ›Œ๋ฅญํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋‘ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

@vkarpov15 ์„ค๋ช… ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ openSet ์—์„œ๋„ ๋™์ผํ•œ ์‚ฌ์šฉ ์ค‘๋‹จ ๊ฒฝ๊ณ ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค(๋ณต์ œ ์„ธํŠธ๋ฅผ ์‚ฌ์šฉ ์ค‘์ž…๋‹ˆ๋‹ค).

์š”์•ฝํ•˜์ž๋ฉด ์ด ๊ฒฝ๊ณ ๋Š” Mongoose์˜ ๋‚ด๋ถ€ ์ž‘๋™์—๋งŒ ๊ด€๋ จ๋˜๋ฏ€๋กœ ์ง€๊ธˆ์€ ๋ฌด์‹œํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•˜๋ฉฐ useMongoClient ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์•„์ง ํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

์–ผ๋งˆ๋‚˜ ์•ˆ์ •์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ? ์‚ฌ์šฉํ•ด๋„ ์•ˆ์ „ํ•œ๊ฐ€์š”? ์šฐ๋ฆฌ์˜ ๋ชจ๋“  ๋ชจ๋ธ๊ณผ ์—ฐ๊ฒฐ ๋กœ์ง์„ ๋ฆฌํŒฉํ† ๋งํ•˜๋Š” ๋ฐ 2์‹œ๊ฐ„์„ ์†Œ๋น„ํ•˜์—ฌ ์•„์ง ํ”„๋กœ๋•์…˜์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜๊ณ  ์‹ถ์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

ํ”Œ๋ž˜๊ทธ ์‚ฌ์šฉ์ด ์•ˆ์ •์ ์ด๊ณ  ์•ž์œผ๋กœ ๊ถŒ์žฅ๋˜๋Š” ์—ฐ๊ฒฐ ๋ฐฉ๋ฒ•์ด ๋  ๋•Œ๊นŒ์ง€ ์‚ฌ์šฉ ์ค‘๋‹จ ๊ฒฝ๊ณ ๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ์ด๋ฏธ ๊ทธ ์ง€์ ์— ๋„๋‹ฌํ–ˆ์Šต๋‹ˆ๊นŒ?

@vkarpov15

ํ•˜์ง€๋งŒ createConnection์—์„œ ๋น„๋™๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. db ์„œ๋ฒ„์— ๋Œ€ํ•ด ๋‘ ๊ฐ€์ง€ ํ…Œ์ŠคํŠธ๋ฅผ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ๋Š” URL์ด ์ž‘๋™ํ•˜๊ณ  ๋‚ด๊ฐ€ ์“ฐ๊ณ  ์ฝ์„ ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ณธ mongo-js ์นด๋‚˜๋ฆฌ์•„ ํ…Œ์ŠคํŠธ์ž…๋‹ˆ๋‹ค.

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

await์™€ ํ•จ๊ป˜ mongoose createConnection์„ ์‚ฌ์šฉํ•˜์—ฌ 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)`

๋‚˜๋Š” ์—ฌ๊ธฐ์„œ ํฌ๊ฒŒ ํ‹€๋ฆด ์ˆ˜ ์žˆ์ง€๋งŒ ๋‚˜์—๊ฒŒ๋Š” ๋น„๋™๊ธฐ/์•ฝ์† ๋ฌธ์ œ์ฒ˜๋Ÿผ ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ €๋Š” ๋ชฝ๊ณ  ์•„ํ‹€๋ผ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. {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).

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค.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 ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ €๋Š” ๋ชฝ๊ณ  ์•„ํ‹€๋ผ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์™œ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

@Thinkdiff

์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ํ‰์†Œ์™€ ๊ฐ™์ด mLab ๋ฐ MongoDB Atlas์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

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'
์šฐ๋ฆฌ: 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-SteveBrush ์ง€์ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚ด๊ฐ€ ์ œ๋Œ€๋กœ ์ดํ•ดํ–ˆ๋‹ค๋ฉด

useMongoClient = true => Mongo 3.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 ์„ค์น˜ - [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 ๋ชฝ๊ตฌ์Šค = ์š”๊ตฌ("๋ชฝ๊ตฌ์Šค");
const db = " mongodb://localhost/testaroo ";

mongoose.connection.openUri(db);
mongoose.connection.once("์—ด๊ธฐ", ํ•จ์ˆ˜() {
console.log("์—ฐ๊ฒฐ ์„ค์ •๋จ");
}).on("์˜ค๋ฅ˜", ํ•จ์ˆ˜(์˜ค๋ฅ˜) {
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 ๊ฐ€ ์ œ์•ˆํ•œ ๊ฒƒ์œผ๋กœ ์—ฐ๊ฒฐ ๋กœ์ง์„ ๊ต์ฒดํ•˜๋ฉด ๊ฒฝ๊ณ ๊ฐ€ ์ œ๊ฑฐ๋˜๊ณ  ์ž˜ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค ๐Ÿ‘

์ด ์Šค๋ ˆ๋“œ์˜ ์•ž๋ถ€๋ถ„์—์„œ ์ œ์•ˆํ•œ ๋Œ€๋กœ ๋ชจ๋ธ ์ฐธ์กฐ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

@vitorbarros ์˜ ์†”๋ฃจ์…˜์€ ์‹ค์ œ๋กœ " useMongoClient Option" ๋ฌธ์„œ ์— ๋”ฐ๋ฅด๋ฉด ๊ถŒ์žฅ๋˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ mongoose.Promise = global.Promise; ๋Š” ๊ธฐ๋ณธ Mongo ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์•ฝ์†ํ•˜์ง€ _์•Š์Šต๋‹ˆ๋‹ค_ . "Promises for the MongoDB Driver" ๋ฌธ์„œ ์— ๋”ฐ๋ฅด๋ฉด promiseLibrary ์†์„ฑ๋„ connect ๋ฉ”์„œ๋“œ์˜ options ๊ฐœ์ฒด์—์„œ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด:

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

global.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์— ์žˆ์–ด์•ผ ํ•˜๋ฉฐ ์‚ฌ์šฉ์ž/ํŒจ์Šค ์˜ต์…˜์ด ๋” ์ด์ƒ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
useMongoClient true ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

2017๋…„ 7์›” 17์ผ ์›”์š”์ผ, 20:28 Andrey Prisniak [email protected]
์ผ๋‹ค:

@vitorbarros https://github.com/vitorbarros ์†”๋ฃจ์…˜์ด ์ €์—๊ฒŒ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ 
๋˜ํ•œ @boaz-amit์™€ ๊ฐ™์€ promiseLibrary๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
https://github.com/boaz-amit ๋งํ–ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ์ธ์ฆ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? URL์—์„œ
mongodb://[ ์‚ฌ์šฉ์ž ์ด๋ฆ„:๋น„๋ฐ€๋ฒˆํ˜ธ@
]ํ˜ธ์ŠคํŠธ1[:ํฌํŠธ1][,ํ˜ธ์ŠคํŠธ2[:ํฌํŠธ2],...[,ํ˜ธ์ŠคํŠธN[:ํฌํŠธN]]][/[๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค][?์˜ต์…˜]]
๋˜๋Š” ์˜ต์…˜์—์„œ ์‚ฌ์šฉ์ž์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋” ์ž˜ ์„ค์ •ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๋งˆ๋•…ํ•œ ๊ณณ์„ ๋ชป์ฐพ๊ฒ ์–ด
์ง€๊ธˆ.

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  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"๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ํƒ€์ดํ•‘ ํŒจํ‚ค์ง€๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋Œ€์‹  ์ด ํ”„๋กœ์ ํŠธ์— ํƒ€์ดํ•‘์„ ๋‹ค์‹œ ์ถ”๊ฐ€ํ•˜์„ธ์š”.

์ด ๊ฒฝ๊ณ ์™€ ํ•จ๊ป˜ ์กฐ์น˜๋ฅผ ์ทจํ•ด์•ผ ํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ณ ์ณ์ง€๊ฒ ์ฃ ?

์ž‘๋™ํ•˜๋„๋ก ํƒ€์ดํ•‘์— useMongoClient๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. @iamdubx

@FinalDes ์–ด๋–ป๊ฒŒ? mongoose.connect(process.env.DATABASE, { useMongoClient: true }) ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  URI์—์„œ user:pass ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ ๋‘ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
npm ์ œ๊ฑฐ - ๋ชฝ๊ตฌ์Šค ์ €์žฅ
npm ์„ค์น˜ - [email protected] ์ €์žฅ

์ฃผ์˜: [email protected] ์€ ์•ˆ์ •์ ์ธ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค.

์Šคํ‚ค๋งˆ ๋ฐ ๋ชจ๋ธ ์ƒ์„ฑ ๋ฐ ์•ก์„ธ์Šค๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ณ  ๊ณ„์‹ญ๋‹ˆ๊นŒ?

์Šค๋ ˆ๋“œ์˜ ๋ชจ๋“  ์ˆ˜์ •์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฒฝ๊ณ ์™€ ํ•จ๊ป˜ ๋ชจ๋“  ๊ฒƒ์ด ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. useMongoClient: true ๋˜๋Š” mongoose.createConnection ๋ฅผ ์‹œ๋„ํ•˜๋ฉด ๊ฒฝ๊ณ ๊ฐ€ ์ œ๊ฑฐ๋˜๊ณ  db์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ชจ๋ธ์— ์•ก์„ธ์Šคํ•˜๋ ค๋Š” ์ฝ”๋“œ๋Š” ํŠธ๋ฆฌ๊ฑฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ค๋ฅ˜๊ฐ€ ์—†์œผ๋ฉฐ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@iamdubx
ํƒ€์ดํ•‘์ด ๋ˆ„๋ฝ๋˜์—ˆ์œผ๋ฏ€๋กœ "noImplicitAny": true ๋กœ ์‹คํ–‰ํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ˆ˜์ž… ๋ชฝ๊ตฌ์Šค = ์š”๊ตฌ("๋ชฝ๊ตฌ์Šค");
๊ฐ€์ ธ์˜ค๊ธฐ dotenv = ์š”๊ตฌ("dotenv");
dotenv.config();
๋ชฝ๊ตฌ์Šค.์•ฝ์† = ์ „์—ญ.์•ฝ์†;
const MONGO_URI=`mongodb://${process.env.MONGODB_HOST}:${process.env.MONGODB_PORT}/${process.env.MONGODB_DB}`;
mongoose.connect(MONGO_URI, {
useMongoClient: ์ฐธ,
});

@FinalDes ๋ฌด์—‡์„ ๋ง์”€ํ•˜์‹œ๋Š” ๊ฑด๊ฐ€์š”? ๋ˆ„๋ฝ ๋œ ์ž…๋ ฅ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์œ„์™€ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ์žˆ๊ณ  ์˜ค๋ฅ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

@Snow-Okami์™€ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

  1. const mongoDB = mongoose.connect(config.database, { useMongoClient: true });
    ์ด๊ฒƒ์€ ๊ฒฝ๊ณ ๋ฅผ ์—†์• ๊ณ  db์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋ธ์— ์•ก์„ธ์Šคํ•˜๋ ค๋Š” ๋ชจ๋“  ์‹œ๋„๋Š” ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค(get/post). ์˜ค๋ฅ˜๊ฐ€ ๋ฐ˜ํ™˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  2. const mongoDB = mongoose.connect(config.database, function(){ useMongoClient: true });
    ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์€ ๋‘ ๊ฐ€์ง€ ๊ฒฝ๊ณ ๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ ๊ทธ ์ด์™ธ์˜ ๋ชจ๋“  ๊ฒƒ์€ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ ์–ด๋„ ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค. ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ ์„œ๋ฒ„๊ฐ€ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.
๊ธฐ๋Šฅ ์—…๋ฐ์ดํŠธ๋Š” ์ข‹์ง€๋งŒ ๋ฉ”์„œ๋“œ ์„œ๋ช…์ด๋‚˜ ํ˜ธ์ถœ์„ ๋ณ€๊ฒฝํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

@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.connect('mongodb://localhost/login_register', {
useMongoClient: ์ฐธ
})
.then(() => console.log('์—ฐ๊ฒฐ ์„ฑ๊ณต'))
.catch((err) => console.error(err));
// DB ์—ฐ๊ฒฐ ์ข…๋ฃŒ

์ด๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ์ฝ˜์†” ๊ฒฝ๊ณ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ช…ํ™•ํ•œ ์„ค๋ช…์ด ์ œ๊ณต๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ชฝ๊ตฌ์Šค๋Š” ๋”์ฐํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋‚ด๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ์ธ๊ธฐ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ๋ณธ ์ตœ์•…์˜ ๋ฌธ์„œ ์‚ฌ์ดํŠธ์ž…๋‹ˆ๋‹ค. ๋ถ€๋„๋Ÿฌ์šด ์ผ์ด์•ผ!

์ด์ œ RethinkDB๋กœ ์ „ํ™˜ํ•  ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค. Linux Foundation - ์ด๊ฒƒ์€ ์‹ฌ๊ฐํ•ฉ๋‹ˆ๋‹ค.
์—ญ์‹œ 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} ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•œ ํ›„ ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค.
๋‚˜๋Š” Debian 9, ํ…Œ์ŠคํŠธ ๋ฒ„์ „, MongoDb ๋ฒ„์ „์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. 3.2.11 ๋ฐ ๋ชฝ๊ตฌ์Šค ๋ฒ„์ „. 4.10.4.
'MongoDB์— ์—ฐ๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค' ๋ฉ”์‹œ์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค(์•„๋ž˜ Typescript์—์„œ ์ฝ”๋“œ ๋ณด๊ธฐ). ๋ชจ๋“  ๊ฒƒ์ด ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

(< ๋ชจ๋“  >๋ชฝ๊ตฌ์Šค).Promise = global.Promise;
mongoose.connect(process.env.MONGODB_URI, {useMongoClient: true});
const db = mongoose.connection;
db.on('์˜ค๋ฅ˜', console.error.bind(์ฝ˜์†”, '์—ฐ๊ฒฐ ์˜ค๋ฅ˜:'));
db.once('์—ด๊ธฐ', () => {
console.log('MongoDB์— ์—ฐ๊ฒฐ๋จ');
setRoute(์•ฑ);
app.get('/*', ํ•จ์ˆ˜(์š”์ฒญ, ํ•ด์ƒ๋„) {
res.sendFile(๊ฒฝ๋กœ.join(__dirname, '../public/index.html'));
});
app.listen(app.get('ํฌํŠธ'), () => {
console.log('MyApp์ด ํฌํŠธ์—์„œ ์ˆ˜์‹  ๋Œ€๊ธฐ ' + app.get('port'));
});
});

๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ˜„์žฌ mongoose ๋ฒ„์ „์„ ์ œ๊ฑฐํ•˜๊ณ  ๋” ๋‚ฎ์€ ๋ฒ„์ „ npm install [email protected] --save ์„ ์„ค์น˜ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

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

์ด๊ฒƒ์€ ๋‚ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๋ณ€๊ฒฝ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ ํ›„ ๋˜ ๋‹ค๋ฅธ ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

DeprecationWarning: Mongoose: mpromise(mongoose์˜ ๊ธฐ๋ณธ ํ”„๋ผ๋ฏธ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)๋Š” ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  ๊ณ ์œ ํ•œ ํ”„๋ผ๋ฏธ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์—ฐ๊ฒฐํ•˜์„ธ์š”. http://mongoosejs.com/docs/promises.html

์ด ์ฝ”๋“œ๋Š” ๋ชจ๋“  ์‚ฌ์šฉ ์ค‘๋‹จ ๊ฒฝ๊ณ ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
```์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ
๋ชฝ๊ตฌ์Šค.์•ฝ์† = ์ „์—ญ.์•ฝ์†;
mongoose.connect(์šฐ๋ฆฌ, {
keepAlive: ์‚ฌ์‹ค,
์žฌ์—ฐ๊ฒฐ ์‹œ๋„ ํšŸ์ˆ˜: Number.MAX_VALUE,
useMongoClient: ์ฐธ
});
````
๋งํฌ๋กœ ์ž์„ธํ•œ ์ •๋ณด -> http://mongoosejs.com/docs/connections.html#use -mongo-client

@bricss ํ™˜์ƒ์ ์ž…๋‹ˆ๋‹ค! ๊ฐ์‚ฌ ํ•ด์š”!

@brics ๋‹น์‹ ์€ ๋‚˜์˜ ํ•˜๋ฃจ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์˜์›… ๋ฐฐ์ง€๋ฅผ ํš๋“ํ–ˆ์Šต๋‹ˆ๋‹ค...

ํŽธ์ง‘: @bricss ์‚ฌ์šฉ ์ค‘๋‹จ ๊ฒฝ๊ณ ๊ฐ€ ์ œ๊ฑฐ๋˜์—ˆ์ง€๋งŒ ๋‚ด mLab ์ƒŒ๋“œ๋ฐ•์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ „ ๋ฒ„์ „์˜ MongoDB๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ํ™•์ธํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘: @bricss ์ด์ œ ์ตœ์‹  mongoose 4.11.9 ๋ฐ Azure์˜ Cosmos DB ์—ฐ๊ฒฐ์—์„œ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

@bricss : ๋ธŒ๋ฆญ์„ ๋ฉ‹์ง€๊ฒŒ ์™„์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค! ๋‚ด ๋กœ์ปฌ์—์„œ ์ •๋ง ์˜ค๋ž˜๋œ ๋ฒ„์ „์˜ mongodb๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ง€๋งŒ:+1:

@brics ๊ต‰์žฅํ•ด! ๊ทธ๋Ÿฌ๋‚˜ "reconnectTries"์— ๋” ์ž‘์€ ์ˆ˜๋ฅผ ๋„ฃ๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. DB์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๋‹ค์‹œ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐ ํ•˜๋ฃจ ์ข…์ผ ๋ณด๋‚ด๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@afoke ์˜ ์†”๋ฃจ์…˜์€ ์—ฐ๊ฒฐ ๋ฌธ์ž์—ด(์˜ˆ: mongodb://localhost:27017/test mongodb://localhost:27017 ์ด ์•„๋‹˜)์—์„œ ๋ช…์‹œ์ ์œผ๋กœ db๋ฅผ ์„ ์–ธํ•  ๋•Œ๋งŒ ์ €์—๊ฒŒ ํšจ๊ณผ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ฒฝ๊ณ  ์—†์ด 2๊ฐœ์˜ DB์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚ด ๋ชจ๋ธ์„ ๋‹ค๋ฅธ DB์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

mongoose 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:'์‚ฌ์šฉ์ž ์ด๋ฆ„',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, (์˜ค๋ฅ˜) => {
๋งŒ์•ฝ (์˜ค๋ฅ˜) {
console.log('๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†์Œ: ', ์˜ค๋ฅ˜);
} ๋˜ ๋‹ค๋ฅธ {
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 ๋“ฑ๊ธ‰