MongoDB


๐ŸŒญย ์žฅ๋‹จ์ 

  • ์žฅ์ 
  • ๋‹จ์ 
  • ๐Ÿฅ—ย ๋ฐ์ดํ„ฐ ์‚ฝ์ž…

  • DB๋ช…์„ ์“ฐ๊ณ  collection ๋ช…์„ ์จ์„œ ์ƒ์„ฑํ•˜๊ณ , insertOne์„ ์ด์šฉํ•ด ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์•„๋ž˜ ์ฝ”๋“œ๋Š” ์ฝœ๋ฐฑ์„ ํ™œ์šฉํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค.
  • const { MongoClient, ServerApiVersion } = require('mongodb');
    const uri =
    'mongodb+srv://j56237:qwer1234@cluster0.03qkgmh.mongodb.net/?retryWrites=true&w=majority';
    const client = new MongoClient(uri, {
    useNewUrlParser: true,
    useUnifiedTopology: true,
    serverApi: ServerApiVersion.v1,
    });
    client.connect((err) => {
    const test = client.db('kdt5').collection('test');
    test.deleteMany({}, (deleteErr, result) => {
    if (deleteErr) throw deleteErr;
    console.log(result);
    test.insertOne(
    {
    name: 'JKE',
    nickName: 'goorm',
    },
    (insertErr, result) => {
    console.log(result);
    const findCursor = test.find({});
    findCursor.toArray((err, data) => {
    console.log(data);
    });
    },
    );
    });
    });
  • ์‚ฝ์ž…ํ•œ ๋ฐ์ดํ„ฐ๋Š” Atlas์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
  • find() ์•ˆ์— ๊ฐ์ฒด๊ฐ€ ๋นˆ ๊ฐ์ฒด์ด๋ฏ€๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๋Š”๋‹ค.
  • ์ฝœ๋ฐฑ์€ ์ด์šฉํ•œ ๋ฐฉ๋ฒ•์€ ์ฝ”๋“œ์˜ ์ˆ˜์ •์ด ์šฉ์ดํ•˜์ง€๋Š” ์•Š๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
  • insertOne

  • ํ•˜๋‚˜์˜ ๋„ํ๋จผํŠธ๋ฅผ ์‚ฝ์ž…ํ•œ๋‹ค.
  • client.connect((err) => {
    const test = client.db("kdt5").collection("test");
    test.deleteMany({}, (deleteErr, deleteResult) => {
    if (deleteErr) throw deleteErr;
    test.insertOne(
    {
    name: "pororo",
    age: 5,
    },
    (insertErr, insertResult) => {
    if (insertErr) throw insertErr;
    console.log(insertResult);
    }
    );
    });
    });
  • ์œ„์ชฝ deleteMany๋Š” ๋นˆ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์šฐ๋Š” ์ฝ”๋“œ์ด๋‹ค.
  • ์ฒซ๋ฒˆ์งธ ์ธ์ž์—๋Š” ๊ฐ์ฒด ๋ฐ์ดํ„ฐ / ๋‘๋ฒˆ์งธ ์ธ์ž์—๋Š” Err์™€ Result๋ฅผ ๊ฐ€์ง„ ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ๊ฐ€์ง„๋‹ค.
  • insertMany

  • ์—ฌ๋Ÿฌ ๋„ํ๋จผํŠธ๋ฅผ ํ•œ๋ฒˆ์— ์‚ฝ์ž…ํ•œ๋‹ค.
  • ์‚ฝ์ž…ํ•  ๋„ํ๋จผํŠธ๋Š” ๋ฐฐ์—ด์— ๋‹ด๊ธด ๊ฐ์ฒด ํ˜•ํƒœ๋กœ ์ „๋‹ฌ๋œ๋‹ค.
  • client.connect((err) => {
    const test = client.db('kdt5').collection('test');
    test.deleteMany({}, (deleteErr, deleteResult) => {
    if (deleteErr) throw deleteErr;
    console.log(deleteResult);
    test.insertMany(
    [
    { name: 'pororo', age: 5 },
    { name: 'crong', age: 4 },
    { name: 'loopy', age: 6 },
    ],
    (insertErr, insertResult) => {
    if (insertErr) throw insertErr;
    console.log(insertResult);
    },
    );
    });
    });

    ๐Ÿžย ๋ฐ์ดํ„ฐ ์‚ญ์ œ

    deleteOne

  • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๊ฐ€์žฅ ์ฒ˜์Œ์˜ ๋„ํ๋จผํŠธ ํ•˜๋‚˜๋ฅผ ์‚ญ์ œํ•œ๋‹ค.
  • ์กฐ๊ฑด์€ ๊ฐ์ฒด ํ˜•ํƒœ๋กœ์„œ deleteOne์˜ ์ฒซ๋ฒˆ์งธ ์ธ์ž๋กœ ์ „๋‹ฌํ•œ๋‹ค.
  • client.connect((err) => {
    const test = client.db('kdt5').collection('test');
    test.deleteMany({}, (deleteErr, deleteResult) => {
    if (deleteErr) throw deleteErr;
    console.log(deleteResult);
    test.insertMany(
    [
    { name: 'pororo', age: 5 },
    { name: 'crong', age: 4 },
    { name: 'loopy', age: 6 },
    ],
    (insertErr, insertResult) => {
    if (insertErr) throw insertErr;
    console.log(insertResult);
    test.deleteOne({ name: 'crong' }, (deleteOneErr, deleteOneResult) => {
    if (deleteOneErr) throw deleteOneErr;
    console.log(deleteOneResult);
    });
    },
    );
    });
    });
  • name์ด โ€˜crongโ€™์ธ ๊ฐ’์„ ์ง€์›Œ์ค€๋‹ค.
  • ๋ฝ€๋กœ๋กœ์™€ ๋ฃจํ”ผ๋งŒ DB์— ๋‚จ๊ฒŒ๋œ๋‹ค.
  • deleteMany

  • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ชจ๋“  ๋„ํ๋จผํŠธ๋ฅผ ์‚ญ์ œํ•œ๋‹ค.
  • ์กฐ๊ฑด์€ ๊ฐ์ฒด ํ˜•ํƒœ๋กœ์„œ deleteOne์˜ ์ฒซ๋ฒˆ์งธ ์ธ์ž๋กœ ์ „๋‹ฌํ•˜๋ฉด ๋œ๋‹ค.
  • client.connect((err) => {
    const test = client.db('kdt5').collection('test');
    test.deleteMany({}, (deleteErr, deleteResult) => {
    if (deleteErr) throw deleteErr;
    console.log(deleteResult);
    test.insertMany(
    [
    { name: 'pororo', age: 5 },
    { name: 'crong', age: 4 },
    { name: 'loopy', age: 6 },
    ],
    (insertErr, insertResult) => {
    if (insertErr) throw insertErr;
    console.log(insertResult);
    test.deleteMany(
    { age: { $gte: 5 } },
    (deleteManyErr, deleteManyResult) => {
    if (deleteManyErr) throw deleteManyErr;
    console.log(deleteManyResult);
    },
    );
    },
    );
    });
    });
  • gte๋Š” Greater Than Eqaul์˜ ์•ฝ์ž๋กœ ํฌ๊ฑฐ๋‚˜ ์ž‘์„๋•Œ๋ฅผ ๋œปํ•œ๋‹ค.
  • ๋”ฐ๋ผ์„œ ์œ„ ์ฝ”๋“œ๋Š” age๊ฐ€ 5์ด์ƒ์ด๋ฉด ์ง€์šฐ๊ฒŒ ๋œ๋‹ค.
  • ํฌ๋กฑ๋งŒ DB์— ๋‚จ๊ฒŒ๋œ๋‹ค.
  • ๐Ÿงˆย ๋ฐ์ดํ„ฐ ์ˆ˜์ •

    updateOne

  • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๊ฐ€์žฅ ์ฒ˜์Œ์˜ ๋„ํ๋จผํŠธ ํ•˜๋‚˜๋ฅผ ์ˆ˜์ •ํ•œ๋‹ค.
  • ์กฐ๊ฑด์€ ์ฒซ๋ฒˆ์งธ ์ธ์ž๋กœ ์ „๋‹ฌํ•˜๊ณ , ๋ณ€๊ฒฝ์ ์€ ๋‘๋ฒˆ์งธ ์ธ์ž๋กœ ์ „๋‹ฌํ•œ๋‹ค.
  • ๋ณ€๊ฒฝ๋ถ€๋ถ„์€ $set:์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • client.connect((err) => {
    const test = client.db('kdt5').collection('test');
    test.deleteMany({}, (deleteErr, deleteResult) => {
    if (deleteErr) throw deleteErr;
    console.log(deleteResult);
    test.insertMany(
    [
    { name: 'pororo', age: 5 },
    { name: 'crong', age: 4 },
    { name: 'loopy', age: 6 },
    ],
    (insertErr, insertResult) => {
    if (insertErr) throw insertErr;
    console.log(insertResult);
    test.updateOne(
    { name: 'loopy' },
    { $set: { name: '๋ฃจํ”ผ' } },
    (updateOneErr, updateOneResult) => {
    if (updateOneErr) throw updateOneErr;
    console.log(updateOneResult);
    },
    );
    },
    );
    });
    });
  • ์ด๋ ‡๊ฒŒ ๋˜๋ฉด loopy๋งŒ ์ด๋ฆ„์ด ํ•œ๊ธ€ โ€˜๋ฃจํ”ผโ€™๋กœ ๋ณ€ํ•˜๊ฒŒ ๋œ๋‹ค.
  • updateMany

  • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ชจ๋“  ๋„ํ๋จผํŠธ๋ฅผ ์ˆ˜์ •ํ•œ๋‹ค.
  • ์กฐ๊ฑด์€ ์ฒซ๋ฒˆ์งธ ์ธ์ž๋กœ ์ „๋‹ฌํ•˜๊ณ , ๋ณ€๊ฒฝ์ ์€ ๋‘๋ฒˆ์งธ ์ธ์ž๋กœ ์ „๋‹ฌํ•œ๋‹ค.
  • ๋ณ€๊ฒฝ๋ถ€๋ถ„์€ $set:์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • client.connect((err) => {
    const test = client.db('kdt5').collection('test');
    test.deleteMany({}, (deleteErr, deleteResult) => {
    if (deleteErr) throw deleteErr;
    console.log(deleteResult);
    test.insertMany(
    [
    { name: 'pororo', age: 5 },
    { name: 'crong', age: 4 },
    { name: 'loopy', age: 6 },
    ],
    (insertErr, insertResult) => {
    if (insertErr) throw insertErr;
    console.log(insertResult);
    test.updateMany(
    { age: { $gte: 5 } },
    { $set: { name: '๋‚˜์ด๊ฐ€ 5์‚ด ์ด์ƒ์ธ ์นœ๊ตฌ๋“ค' } },
    (updateManyErr, updateManyResult) => {
    if (updateManyErr) throw updateManyErr;
    console.log(updateManyResult);
    },
    );
    },
    );
    });
    });
  • ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฝ€๋กœ๋กœ์™€ ๋ฃจํ”ผ์˜ name์ด โ€˜๋‚˜์ด๊ฐ€ 5์‚ด ์ด์ƒ์ธ ์นœ๊ตฌ๋“คโ€™๋กœ ๋ณ€๊ฒฝ๋œ๋‹ค.
  • $set ๋ง๊ณ  $inc๋„ ์กด์žฌํ•œ๋‹ค. ์ด๋Š” ์›๋ž˜ ๊ฐ’์— +๋ฅผ ์‹œ์ผœ์ค€๋‹ค.
  • ๐ŸŒฏย ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰

    findOne

  • ๊ฒ€์ƒ‰ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์ตœ์ดˆ์˜ ๋„ํ๋จผํŠธ ํ•˜๋‚˜๋ฅผ ์ฐพ์•„์ค€๋‹ค.
  • client.connect((err) => {
    const test = client.db('kdt5').collection('test');
    test.deleteMany({}, (deleteErr, deleteResult) => {
    if (deleteErr) throw deleteErr;
    console.log(deleteResult);
    test.insertMany(
    [
    { name: 'pororo', age: 5 },
    { name: 'crong', age: 4 },
    { name: 'loopy', age: 6 },
    ],
    (insertErr, insertResult) => {
    if (insertErr) throw insertErr;
    console.log(insertResult);
    test.findOne({ name: 'loopy' }, (findOneErr, findOneData) => {
    if (findOneErr) throw findOneErr;
    console.log(findOneData);
    });
    },
    );
    });
    });
  • name์ด โ€˜loopyโ€™์ธ ๊ฒƒ์„ ์ฐพ์•„ console์— ์ฐ์–ด์ค€๋‹ค.
  • find

  • findMany๋Š” ์—†๊ณ  find๊ฐ€ ์žˆ๋‹ค.
  • ์กฐ๊ฑด์— ๋งž๋Š” ๋„ํ๋จผํŠธ๋ฅผ ์ „๋ถ€ ์ฐพ์•„์ค€๋‹ค.
  • ๋‹จ, find๋Š” ๋…ํŠนํ•œ ํŠน์„ฑ์„ ๊ฐ€์ง„๋‹ค.
  • client.connect((err) => {
    const test = client.db('kdt5').collection('test');
    test.deleteMany({}, (deleteErr, deleteResult) => {
    if (deleteErr) throw deleteErr;
    console.log(deleteResult);
    test.insertMany(
    [
    { name: 'pororo', age: 5 },
    { name: 'crong', age: 4 },
    { name: 'loopy', age: 6 },
    ],
    (insertErr, insertResult) => {
    if (insertErr) throw insertErr;
    console.log(insertResult);
    const findCursor = test.find({ age: { $gte: 5 } });
    console.log(findCursor);
    findCursor.toArray((toArrErr, arrData) => console.log(arrData));
    },
    );
    });
    });
  • ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด 5์‚ด ์ด์ƒ์ธ ๋ฝ€๋กœ๋กœ์™€ ๋ฃจํ”ผ๋งŒ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋œ๋‹ค.
  • findCursor๋Š” ๋‹ค์Œ์ฒ˜๋Ÿผ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹ˆ๋‹ค.
  • ๐Ÿ ย ๋น„๊ต์‹

  • $eq: ๊ฐ™์„ ๋•Œ
  • $gt: ํด ๋•Œ
  • $gte: ํฌ๊ฑฐ๋‚˜ ๊ฐ™์„ ๋•Œ
  • $lt: ์ž‘์„ ๋•Œ
  • $lte: ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์„ ๋•Œ
  • $ne: ๋‹ค๋ฅผ ๋•Œ
  • $in: ๋ฐฐ์—ด์— ์ง€์ •๋œ ๊ฐ’ ์ค‘ ํ•˜๋‚˜์™€ ์ผ์น˜ํ•œ ๊ฐ’
  • $nin: ๋ฐฐ์—ด์— ์ง€์ •๋œ ๊ฐ’๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๊ฐ’
  • users.updateMany(
    {
    name: { $ne: 'loopy' },
    },
    {
    $set: {
    name: '๋ฃจํ”ผ ์•„๋‹˜',
    },
    },

    ๐Ÿฅฏย ๋…ผ๋ฆฌ์‹

  • $or: ์กฐ๊ฑด๋“ค ์ค‘ ํ•˜๋‚˜๋ผ๋„ true๋ฉด ๋ฐ˜ํ™˜
  • $and: ์กฐ๊ฑด๋“ค์ด ๋ชจ๋‘ true์ผ ๋•Œ ๋ฐ˜ํ™˜
  • $not: ์กฐ๊ฑด์ด false์ผ๋•Œ ๋ฐ˜ํ™˜
  • $nor: ์กฐ๊ฑด๋“ค์ด ๋ชจ๋‘ false์ผ ๋•Œ ๋ฐ˜ํ™˜
  • const cusor = users.find({
    $and: [{ age: { $gte: 5 } }, { name: 'loopy' }],
    });
    cursor.toArray((err, data) => {
    console.log(data);
    });

    ๐Ÿฆดย Async / Await๋กœ ๋ฐ”๊พธ๊ธฐ

  • ์ฝœ๋ฐฑํ•จ์ˆ˜๋Š” ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ๋ถˆํŽธํ•œ ๋‹จ์ ์ด ์žˆ๋‹ค.
  • async function main() {
    try {
    await client.connect();
    const test = client.db('kdt5').collection('test');
    await test.deleteMany({});
    await test.insertOne({ name: 'pororo', age: 5 });
    await test.deleteMany({});
    await test.insertMany([
    { name: 'pororo', age: 5 },
    { name: 'crong', age: 4 },
    { name: 'loopy', age: 6 },
    ]);
    await test.deleteOne({ name: 'crong' });
    await test.deleteMany({});
    await test.insertMany([
    { name: 'pororo', age: 5 },
    { name: 'crong', age: 4 },
    { name: 'loopy', age: 6 },
    ]);
    await test.updateMany({ age: { $gte: 5 } }, { $set: { age: 10 } });
    const findCursor = test.find({ age: { $gte: 10 } });
    const dataArr = await findCursor.toArray();
    console.log(dataArr);
    } catch (err) {
    console.error(err);
    }
    }
    main();
  • async / await๋กœ ํ‘œํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ฝ”๋“œ ๊ฐ€๋…์„ฑ์ด ์ข‹์•„์ง€๊ณ  ์–‘๋„ ์ค„์€ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
  • ๐Ÿฅƒย Mongoose

  • MongoDB๋Š” ์‚ฌ์šฉ์ƒ์˜ ์ œ์•ฝ์ด ์ „ํ˜€ ์—†์–ด์„œ ํŽธ๋ฆฌํ•˜๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜ ์ด ๋•Œ๋ฌธ์— key์˜ ๊ฐ’์ด ๋‹ฌ๋ผ์ง€๋Š” ๋“ฑ ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ด๋Š” Mongoose๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์Šคํ‚ค๋งˆ ์ƒ์„ฑ

  • /models/user.js
  • const mongoose = require('mongoose');
    const { Schema } = mongoose;
    const userSchema = new Schema(
    {
    id: {
    type: String,
    required: true,
    unique: true,
    },
    password: {
    type: String,
    required: true,
    },
    createAt: {
    type: Date,
    default: Date.now,
    },
    },
    {
    collection: 'mongoose-user',
    },
    );
    module.exports = mongoose.model('User', userSchema);
  • ์œ„์ฒ˜๋Ÿผ ํƒ€์ž…๊ณผ required ๋“ฑ์„ ์ •ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.
  • CRUD ์ฟผ๋ฆฌ

  • mongoDB์™€ ๋ชจ๋‘ ๋™์ผํ•˜์ง€๋งŒ insertOne ๋Œ€์‹  create๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.