• Q&A
  • 회원가입
  • 로그인

[mongodb] Node.js - MongoDB Find (데이터 찾기)

MongoDB :  find 및 findOne 메서드 사용해 컬렉션에서 데이터를 찾음.
cf. MySQL : SELECT 문 사용해, 테이블에서 데이터를 찾음 .
 
collection에서 1개 데이터 찾기 - findOne() 메서드

1. C:\User\사용자명\hz.js 생성.

 

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

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

const options = {useUnifiedTopology: true}; 


MongoClient.connect(url, options, function(err, db) {

  if (err) throw err;

  var dbo = db.db("hz");

  dbo.collection("hz_member").findOne({}, function(err, result) {

    if (err) throw err;

    console.log(result.mb_name);

    db.close();

  });

});

 


2. CMD 모드에서 아래 명령어 입력해 시작 설정.

 

C:\User\사용자명>node hz.js

 


[반환값]

 

homzzang 

 

 
collection에서 여러 데이터 가져오기 - find() 메서드

 

MongoDB의 테이블에서 데이터를 선택하려면 find() 메서드 사용 가능.


이 find()메서드는 선택 항목의 모든 항목을 반환.


find()메서드의 첫 번째 매개변수 는 쿼리 객체임. 

이 예에서는 컬렉션의 모든 문서를 선택하는 빈 쿼리 개체를 사용.


find() 메서드에 매개변수가 없으면 MySQL의 SELECT * 와 동일한 결과가 제공 안 됨.

 


1. C:\User\사용자명\hz.js 생성.

 

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

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

const options = {useUnifiedTopology: true}; 


MongoClient.connect(url, options, function(err, db) {

  if (err) throw err;

  var dbo = db.db("hz");

  dbo.collection("hz_member").find({}).toArray(function(err, result) {

    if (err) throw err;

    console.log(result);

    db.close();

  });

});

 


2. CMD 모드에서 아래 명령어 입력해 시작 설정.

 

C:\User\사용자명>node hz.js

 


[반환값]

 

[

  {

    _id: 5f69a097cce10730bc488442,

    mb_name: 'homzzang',

    mb_level: '10'

  },

  { _id: 5f69a0b62671242f44d42a96, mb_name: 'AAA', mb_level: '1' },

  { _id: 5f69a0b62671242f44d42a97, mb_name: 'BBB', mb_level: '2' },

  { _id: 5f69a0b62671242f44d42a98, mb_name: 'CCC', mb_level: '2' },

  { _id: 5f69a0b62671242f44d42a99, mb_name: 'DDD', mb_level: '3' },

  { _id: 5f69a0b62671242f44d42a9a, mb_name: 'EEE', mb_level: '3' },

  { _id: 5f69a0b62671242f44d42a9b, mb_name: 'FFF', mb_level: '3' },

  { _id: 5f69a0b62671242f44d42a9c, mb_name: 'GGG', mb_level: '4' },

  { _id: 5f69a0b62671242f44d42a9d, mb_name: 'HHH', mb_level: '4' },

  { _id: 5f69a0b62671242f44d42a9e, mb_name: 'III', mb_level: '4' },

  { _id: 5f69a0b62671242f44d42a9f, mb_name: 'JJJ', mb_level: '4' },

  { _id: 5f69a0b62671242f44d42aa0, mb_name: 'KKK', mb_level: '5' },

  { _id: 5f69a0b62671242f44d42aa1, mb_name: 'LLL', mb_level: '5' },

  { _id: 5f69a0b62671242f44d42aa2, mb_name: 'MMM', mb_level: '5' },

  { _id: 5f69a0b62671242f44d42aa3, mb_name: 'NNN', mb_level: '5' },

  { _id: 5f69a101dd216c03b8e71364, mb_name: 'AAA', mb_level: '1' },

  { _id: 5f69a101dd216c03b8e71365, mb_name: 'BBB', mb_level: '2' },

  { _id: 5f69a101dd216c03b8e71366, mb_name: 'CCC', mb_level: '2' },

  { _id: 5f69a101dd216c03b8e71367, mb_name: 'DDD', mb_level: '3' },

  { _id: 5f69a101dd216c03b8e71368, mb_name: 'EEE', mb_level: '3' },

  { _id: 5f69a101dd216c03b8e71369, mb_name: 'FFF', mb_level: '3' },

  { _id: 5f69a101dd216c03b8e7136a, mb_name: 'GGG', mb_level: '4' },

  { _id: 5f69a101dd216c03b8e7136b, mb_name: 'HHH', mb_level: '4' },

  { _id: 5f69a101dd216c03b8e7136c, mb_name: 'III', mb_level: '4' },

  { _id: 5f69a101dd216c03b8e7136d, mb_name: 'JJJ', mb_level: '4' },

  { _id: 5f69a101dd216c03b8e7136e, mb_name: 'KKK', mb_level: '5' },

  { _id: 5f69a101dd216c03b8e7136f, mb_name: 'LLL', mb_level: '5' },

  { _id: 5f69a101dd216c03b8e71370, mb_name: 'MMM', mb_level: '5' },

  { _id: 5f69a101dd216c03b8e71371, mb_name: 'NNN', mb_level: '5' },

  { _id: 101, mb_name: 'OOO' },

  { _id: 102, mb_name: 'PPP' },

  { _id: 103, mb_name: 'QQQ' }

]

 

 
일부 컬럼의 데이터만 가져오기

 

1.

find()메서드의 두 번째 매개변수 projection는 결과에 포함할 필드를 설명하는 객체임. 

 

2.

이 매개 변수는 선택 사항이며 생략하면 모든 필드가 결과에 포함.



 

1. C:\User\사용자명\hz.js 생성.

 

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

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

const options = {useUnifiedTopology: true};

 

MongoClient.connect(url, options, function(err, db) {

  if (err) throw err;

  var dbo = db.db("hz");

  dbo.collection("hz_member").find({}, { projection: { _id: 0, mb_name: 1, mb_level: 1 } }).toArray(function(err, result) {

    if (err) throw err;

    console.log(result);

    db.close();

  });

});

 


2. CMD 모드에서 아래 명령어 입력해 시작 설정.

 

C:\User\사용자명>node hz.js

 


[반환값]

 

[

  { mb_name: 'homzzang', mb_level: '10' },

  { mb_name: 'AAA', mb_level: '1' },

  { mb_name: 'BBB', mb_level: '2' },

  { mb_name: 'CCC', mb_level: '2' },

  { mb_name: 'DDD', mb_level: '3' },

  { mb_name: 'EEE', mb_level: '3' },

  { mb_name: 'FFF', mb_level: '3' },

  { mb_name: 'GGG', mb_level: '4' },

  { mb_name: 'HHH', mb_level: '4' },

  { mb_name: 'III', mb_level: '4' },

  { mb_name: 'JJJ', mb_level: '4' },

  { mb_name: 'KKK', mb_level: '5' },

  { mb_name: 'LLL', mb_level: '5' },

  { mb_name: 'MMM', mb_level: '5' },

  { mb_name: 'NNN', mb_level: '5' },

  { mb_name: 'OOO' },

  { mb_name: 'PPP' },

  { mb_name: 'QQQ' }

]

 

 
 
중요.
동일 객체에서 0과 1값을 모두 지정할 수는 없음. (단, 필드 중 하나가 _id 필드 인 경우 제외). 
값이 0인 필드를 지정하면 다른 모든 필드는 값 1을 가져오고 그 반대의 경우도 마찬가지임.

projection 예제1 - _id, mb_name 컬럼만 출력

 

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

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

const options = {useUnifiedTopology: true}; 


MongoClient.connect(url, options, function(err, db) {

  if (err) throw err;

  var dbo = db.db("hz");

  dbo.collection("hz_member").find({}, { projection: { mb_level: 0 } }).toArray(function(err, result) {

    if (err) throw err;

    console.log(result);

    db.close();

  });

});

 


[반환값]

 

[

  { _id: 5f69b3995edfd806d4abfd60, mb_name: 'homzzang' },

  { _id: 5f69b3b2a650682498a08889, mb_name: 'AAA' },

  { _id: 5f69b3b2a650682498a0888a, mb_name: 'BBB' },

  { _id: 5f69b3b2a650682498a0888b, mb_name: 'CCC' },

  { _id: 5f69b3b2a650682498a0888c, mb_name: 'DDD' },

  { _id: 5f69b3b2a650682498a0888d, mb_name: 'EEE' },

  { _id: 5f69b3b2a650682498a0888e, mb_name: 'FFF' },

  { _id: 5f69b3b2a650682498a0888f, mb_name: 'GGG' },

  { _id: 5f69b3b2a650682498a08890, mb_name: 'HHH' },

  { _id: 5f69b3b2a650682498a08891, mb_name: 'III' },

  { _id: 5f69b3b2a650682498a08892, mb_name: 'JJJ' },

  { _id: 5f69b3b2a650682498a08893, mb_name: 'KKK' },

  { _id: 5f69b3b2a650682498a08894, mb_name: 'LLL' },

  { _id: 5f69b3b2a650682498a08895, mb_name: 'MMM' },

  { _id: 5f69b3b2a650682498a08896, mb_name: 'NNN' },

  { _id: 101, mb_name: 'OOO' },

  { _id: 102, mb_name: 'PPP' },

  { _id: 103, mb_name: 'QQQ' }

]

 

 
projection 예제2 - mb_name만 출력

 

중요: _id 필드를 제외하려면 해당 값을 0으로 설정.

 


 

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

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

const options = {useUnifiedTopology: true}; 


MongoClient.connect(url, options, function(err, db) {

  if (err) throw err;

  var dbo = db.db("hz");

  dbo.collection("hz_member").find({}, { projection: { _id: 0, mb_level: 0 } }).toArray(function(err, result) {

    if (err) throw err;

    console.log(result);

    db.close();

  });

});

 


[반환값]

 

[

  { mb_name: 'homzzang' }, { mb_name: 'AAA' },

  { mb_name: 'BBB' },      { mb_name: 'CCC' },

  { mb_name: 'DDD' },      { mb_name: 'EEE' },

  { mb_name: 'FFF' },      { mb_name: 'GGG' },

  { mb_name: 'HHH' },      { mb_name: 'III' },

  { mb_name: 'JJJ' },      { mb_name: 'KKK' },

  { mb_name: 'LLL' },      { mb_name: 'MMM' },

  { mb_name: 'NNN' },      { mb_name: 'OOO' },

  { mb_name: 'PPP' },      { mb_name: 'QQQ' }

]

 

 
projection 예제3 - mb_name, mb_level 컬럼 출력

 

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

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

const options = {useUnifiedTopology: true}; 


MongoClient.connect(url, options, function(err, db) {

  if (err) throw err;

  var dbo = db.db("hz");

  dbo.collection("hz_member").find({}, { projection: { _id: 0 } }).toArray(function(err, result) {

    if (err) throw err;

    console.log(result);

    db.close();

  });

});

 


[반환값]

 

[

  { mb_name: 'homzzang', mb_level: '10' },

  { mb_name: 'AAA', mb_level: '1' },

  { mb_name: 'BBB', mb_level: '2' },

  { mb_name: 'CCC', mb_level: '2' },

  { mb_name: 'DDD', mb_level: '3' },

  { mb_name: 'EEE', mb_level: '3' },

  { mb_name: 'FFF', mb_level: '3' },

  { mb_name: 'GGG', mb_level: '4' },

  { mb_name: 'HHH', mb_level: '4' },

  { mb_name: 'III', mb_level: '4' },

  { mb_name: 'JJJ', mb_level: '4' },

  { mb_name: 'KKK', mb_level: '5' },

  { mb_name: 'LLL', mb_level: '5' },

  { mb_name: 'MMM', mb_level: '5' },

  { mb_name: 'NNN', mb_level: '5' },

  { mb_name: 'OOO' },

  { mb_name: 'PPP' },

  { mb_name: 'QQQ' }

]

 

 
projection 예제4 - 에러 발생 경우

 

동일한 객체에 0과 1 값을 모두 지정하면 오류가 발생. (필드 중 하나가 _id 필드 인 경우 제외).

 


 

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

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

const options = {useUnifiedTopology: true}; 


MongoClient.connect(url, options, function(err, db) {

  if (err) throw err;

  var dbo = db.db("hz");

  dbo.collection("hz_member").find({}, { projection: { mb_name: 1, mb_level: 0 } }).toArray(function(err, result) {

    if (err) throw err;

    console.log(result);

    db.close();

  });

});

 


[반환값] 에러 발생.

 

C:\Users\사용자명\node_modules\mongodb\lib\utils.js:668

          throw error;

          ^


MongoError: Cannot do exclusion on ....

 


result 객체

 

위 예제의 결과에서 알 수 있듯, 결과는 각 문서를 객체로 포함하는 배열로 변환 가능.

예를 들어, 세 번째 문서의 이름을 반환하려면 세 번째 배열 객체의 주소 속성을 참조. 

 


 

1.

배열의 index는 0부터 시작. 
(예) 세 번째 자료 index : 2

 

2. 

result 객체 안의 각 속성의 속성값 접근 방법

result[index].column

(예) 

3번째 문서의 mb_name값만 출력.

console.log(result[2].mb_name); // BBB

 


 

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

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

const options = {useUnifiedTopology: true}; 


MongoClient.connect(url, options, function(err, db) {

  if (err) throw err;

  var dbo = db.db("hz");

  dbo.collection("hz_member").find({}, { projection: { mb_name: 1, mb_level: 1 } }).toArray(function(err, result) {

    if (err) throw err;

    console.log(result[2].mb_name);

    db.close();

  });

});

 


[반환값]

 

BBB

 

 
PS.
데이터 출력 개수 제한 - limit(n) 메서드
 
홈짱닷컴 Homzzang.com

방문자 수

오늘 473
어제 1,479
최대 4,391
이달 36,199
전체 1,222,682
찾아주셔서 감사합니다. Since 2012