본문 바로가기

MongoDB

Node.js와 Mongodb 연동 기본(TypeError : db.collection is not a funtion오류해결)

세팅

 

터미널에 $ npm install mongodb --save 명령어 입력을 통해 연결환경 구축하고

터미널이 가리키고 있는 위치에 위와 같은 test.js파일을 생성한다.

 

//test.js

var MongoClient = require('mongodb').MongoClient, assert = require('assert');

// Connection URL
var url = 'mongodb://localhost:27017/test';

// Use connect method to connect to the server
MongoClient.connect(url, function(err, db) {
	assert.equal(null, err);
	console.log("Connected successfully to server");
	res = db.collection('users').find()
	res.toArray(function(err, docs) {
		assert.equal(err, null);
		console.log(docs)
	});
	db.close();
});

 

그 후, 

$ node test.js 명령어를 통해 test.js파일을 실행시킨뒤, 아래와 같이 나오면 성공.

 

 

 

 

 


 

 

※MongoDB 버전에 따른 에러 이슈/

버전에 따른 에러 발생.

 

MongoDB가 3.0버전 이상이 나옴에 따라 TypeError : db.collection is not a funtion

같은 오류가 뜬다. 해결법으로 아래와 같이 2가지 방법이 있다.

 

 

1. 다운그레이드

MongoDB 3.0버전 이상부터 해당이 되니, 2.0버전으로 다운그레이드. 해당 블로그 참조

더보기

Mongo DB 사용 중 database.collection is not a function 에러

출처: https://zxcv5500.tistory.com/287 [샤핀의 blog]) : https://zxcv5500.tistory.com/287

 

 

2. 3.0버전 문법 수정

다운그레이드가 버겁다면 아래와 같이 코드를 수정해서 사용하면 된다.

 

 

var MongoClient = require('mongodb').MongoClient,
	assert = require('assert');

var url = 'mongodb://localhost:27017/test';

MongoClient.connect(url, function(err, db) {
	assert.equal(null, err);
	console.log("Connected successfully to server");

                                              ↓

var MongoClient = require('mongodb').MongoClient,
	assert = require('assert');

var url = 'mongodb://localhost:27017/';

MongoClient.connect(url, function (err, client) {

	var db = client.db('test');
	assert.equal(null, err);
	console.log("Connected successfully to server");

 

기존에 변수 url의 마지막에 연결시킬 db의 이름까지 포함해서 넣었다면

3.0버전부터는 변수 url에 mongodb포트주소만 저장해둔 후,

connect가 발생될 때 client.db('저장소 이름'); 처럼 따로 저장소 이름을 명시해준다.

 

 

 


node.js를 통해 mongoDB에 값 입력

 

 

var MongoClient = require('mongodb').MongoClient,
  assert = require('assert');

MongoClient.connect('mongodb://localhost:27017',{useUnifiedTopology:true}, function (err, client) {

  var db = client.db('test');
  assert.equal(null, err);
  console.log("Connected successfully to server");

    res = db.collection('user').find()
    res.toArray(function (err, docs) {
      assert.equal(err, null);
      console.log(docs)
    });
    client.close();
});

                                         ↓

//mongodb 모듈로부터 MongoClient를 불러옴
var MongoClient = require('mongodb').MongoClient,
  assert = require('assert');
// Connection URL (URL주소 + /db이름))
// var url = 'mongodb://localhost:27017';
// Use connect method to connect to the server
MongoClient.connect('mongodb://localhost:27017',{useUnifiedTopology:true}, function (err, client) {

  var db = client.db('test');
  assert.equal(null, err);
  console.log("Connected successfully to server");
  //collection이름을 쓸때는 아래와 같이 collection+(컬렉션이름)과 같이 쓴다. 또한 find()는 커서값으로, 주소값만 가져오며 실제 데이터를 가져오지 않는다.
  // db.collection('user').insertOne({ first_connect: "Mongo" }).then(function (r) {

    res = db.collection('user').find()
    res.toArray(function (err, docs) {
      assert.equal(err, null);
      console.log(docs)
    });
    client.close();
  // });
});