MongoDB
-
MongoDB install : https://nesoy.github.io/articles/2017-04/MongoDB
-
Mongoose
: ODM( Object Document Mapper)
MongoDB Driver
- mongo ์ฝ์ ํด๋ผ์ด์ธํธ ๋ช ๋ น๊ณผ ๋์ผํ๊ฒ ์กฐ์
npm install mongodb
MongoClient
var MongoClient = require('mongodb').MongoClient;
MongoClient.connect(url,option,callback)
- callback : function(error,db);
var var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost:27017/DATABASE';
var db;
MongoClient.connect(url, function (err, database) {
if (err) {
console.error('MongoDB ์ฐ๊ฒฐ ์คํจ', err);
return;
}
db = database;
});
Collection ๊ฐ์ ธ์ค๊ธฐ
var var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost:27017/DATABASE';
var db;
MongoClient.connect(url, function (err, database) {
if (err) {
console.error('MongoDB ์ฐ๊ฒฐ ์คํจ', err);
return;
}
db = database;
});
var movies = db.Collection('movies');
movies.insert();
Document Insert
insert(docs, options, callback)
insertMany(docs, options, callback)
insertOne(doc, options, callback)
- Promise๊ธฐ๋ฐ, ๋ฐํ๊ฐ์ด Promise
// Promise Based
movies.insert({ title:'์คํ์์ฆ7', director:'JJ ์์ด๋ธ๋ผ์ค', year:2015}).then(function(results) {
// console.log('== Resolved\n', results);
console.log('Promise Based Insert Result : ', results);
}, function(err) {
console.log('== Rejected\n', err);
});
Document find
find
: CursorfindOne(query, options, callback)
// ์ฝ๋ ์
var movies = db.collection('movies');
// ์ ์ฒด ๋ชฉ๋ก
movies.find().toArray(function (err, docs) {
console.log('== Find ALL, toArray');
console.log(docs);
});
// projection
var projection = { _id: 0, title: 1 };
movies.find({}, projection).toArray(function (err, docs) {
console.log('== Find ALL with Projection');
console.log(docs);
});
// Query
movies.find({ title: '์ธํฐ์คํ
๋ผ' }).toArray(function (err, docs) {
console.log('== Find ์ธํฐ์คํ
๋ผ');
console.log(docs);
});
// Query : db.movies.find({year:{$gt:2000} })
movies.find({ year: { $gt: 2000 } }).toArray(function (err, docs) {
console.log('== 2000๋
์ดํ์ ์ํ');
console.log(docs);
});
// Query : db.movies.find({ $or:[ { year: {$gt:2000} },{ director:"ํฌ๋ฆฌ์คํ ํผ ๋๋" } ] } )
movies.find({ $or: [{ year: { $gt: 2000 } }, { director: "ํฌ๋ฆฌ์คํ ํผ ๋๋" }] }).toArray(function (err, docs) {
console.log('== OR Query');
console.log(docs);
});
// limit(5)
movies.find({}).limit(2).toArray(function (err, docs) {
console.log('== limit');
console.log(docs);
});
// ObjecdtID
movies.findOne({}).then(function(result) {
var objectIDStr = result._id.toString();
movies.findOne({_id:objectIDStr}).then(function(result) {
console.log('Find By ID Str : \n', result);
}, function(err) {
console.log('Find By ID Str Error : ', err);
});
movies.findOne({_id:new ObjectID(objectIDStr)}).then(function(result) {
console.log('Find By ObjectID : \n', result);
}, function(err) {
console.log('Find By ObjectID Error : ', err);
});
});
Document Update
var movies = db.collection('movies');
// Update One
movies.updateOne({ title: '์คํ์์ฆ' }, { $set: { title: 'StarWars' } }, function (err, result) {
if (err) {
console.error('UpdateOne Error ', err);
return;
}
console.log('UpdateOne ์ฑ๊ณต ', result);
});
// Update Multi Option - Promise Based
movies.update(
{ director: 'ํฌ๋ฆฌ์คํ ํผ ๋๋' },
{ $set: { director: 'Christopher Nolan' } }, { multi: true }).then(
function resolved(results) {
console.log('Update Success. Promise Based Result : ', results);
},
function rejected(err) {
console.error('Update Error. Rejected : ', err);
});
Document Delete
var movies = db.collection('movies');
// Delete One
movies.deleteOne({title:'์คํ์์ฆ'}, function(err, result) {
if ( err ) {
console.error('DeleteOne Error ', err);
return;
}
console.log('DeleteOne ์ฑ๊ณต ', result);
});
// Delete Many Documents
movies.deleteMany({director:'ํฌ๋ฆฌ์คํ ํผ ๋๋'}).then(function resolved(result) {
console.log('Delete Many Success : ', result);
}, function rejected(err) {
console.log('Delete Many Fail : ', err);
});
Mongoose
- ODM : Object Document Mapper
npm install mongoose
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ
- ์คํค๋ง ์ ์
- ์คํค๋ง์์ ๋ชจ๋ธ
- ๋ชจ๋ธ์ ์ด์ฉํด์ ๋ฐ์ดํฐ ๋ค๋ฃจ๊ธฐ
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ
var mongoose = require('mongoose');
var url = 'mongodb://localhost:27017/Nelp';
mongoose.connect(url);
var db = mongoose.connection;
db.on('error', function(err) {
console.log('Error : ', err);
});
db.on('open', function() {
console.log('Open Event');
});
์คํค๋ง ์ ์
var MovieScheme = mongoose.Schema({
title : String,
director : String,
year : Number,
synopsis : String
});
var Movie = mongoose.model('Movie', MovieScheme);
Error ์ฒ๋ฆฌ
- mongoose v4 ์ด์์ ๋ฒ์ ๋ถํฐ mongoose์ save()์ ์ฟผ๋ฆฌ๊ฐ์ ๋น๋๊ธฐ ๋์์์๋ Promises/A+ conformant pomises๋ฅผ ๋ฐํํ๊ฒ ๋์ด์๋ค.
mongoose.Promise = global.Promise;
์ถ๊ฐํ๋ฉด ํด๊ฒฐ๋๋ค.
__v
์ ๊ฑฐํ๊ธฐ
versionKey
๊ฐ Default๋ก ๋ค์ด๊ฐ๋ค.
var UserSchema = new mongoose.Schema({
nickname: String,
reg_time: {type: Date, default: Date.now}
}, {
versionKey: false // You should be aware of the outcome after set to false
});
Document Insert
Model.save(function(err,product));
: CallbackModel.save().then(resolved,rejected);
: Promise
// Promise Based
// notDefined๋ ์คํค๋ง์ ์ ์๋ ํญ๋ชฉ์ด ์๋๋ค. - ์ ์ฅ ์๋จ
var starwars = new Movie({title:'์คํ์์ฆ7', director:'JJ ์์ด๋ธ๋ผ์ค', year:2015, notDefined:true});
starwars.save().then(function(product) {
console.log('Save Resolved : ', product);
}, function rejected(err) {
console.log('Save Rejected : ', err);
});
Movie.create({title:'์๋ฐํ', director:'์ ์์ค ์นด๋ฉ๋ก ', year:2010}).then(resolved, rejected);
Movie.create({ title: '๋คํฌ ๋์ดํธ', director: 'ํฌ๋ฆฌ์คํ ํผ ๋๋', year: 2008 }).then(resolved, rejected);
Document Find
// ์ฝ๋ฐฑ์ ์ด์ฉํ ๊ฒ์
Movie.find({year:{$gt:2010}}, function(err, docs) {
console.log(docs);
});
// ์ฟผ๋ฆฌ ๊ฐ์ฒด - exec๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ
Movie.findOne({title:'์ธํฐ์คํ
๋ผ'}).exec(function(err, docs) {
console.log(docs);
});
Movie.where('year').gt(2010).exec(function(err, docs) {
console.log('year > 20!0 : ', docs);
});
Document Update
// ๋ํ๋จผํธ ์์ ํ ์ ์ฅ
Movie.findOne({title:'์๋ฐํ'}).exec(function(err, doc) {
if ( doc ) {
doc.title = 'Avata';
doc.save(function(err, product) {
console.log('Modify and Save : ', product);
});
}
});
Movie.update({director:'ํฌ๋ฆฌ์คํ ํผ ๋๋'}, {$set:{director:'Christopher Nolan'}} ).then(resolved, rejected);
Document Delete
// ๋ํ๋จผํธ ์ญ์
Movie.findOne({title:'์๋ฐํ'}).exec(function(err, doc) {
if ( doc ) {
doc.title = 'Avata';
doc.remove(function(err, product) {
console.log('Find and Remove : ', err, product);
});
}
});
Movie.remove({director:'ํฌ๋ฆฌ์คํ ํผ ๋๋'}).then(resolved, rejected);