[MongoDB] mongoDB Query

Posted by 신희준 on June 22, 2018


2018 - 06 - 22 (금)


MongoDB

  • MongoDB Documentation 참조

  • Insert a Single Document (inventory db에 단일 row insert )


db.inventory.insertOne(
    { item : "canvas" , qty : 100 , tags : ["cotton"] , size : {h: 28, w 35.5, uom : "cm"}}
)
  • insert multiple document

db.inventory.insertMany([
   { item: "journal", qty: 25, tags: ["blank", "red"], size: { h: 14, w: 21, uom: "cm" } },
   { item: "mat", qty: 85, tags: ["gray"], size: { h: 27.9, w: 35.5, uom: "cm" } },
   { item: "mousepad", qty: 25, tags: ["gel", "blue"], size: { h: 19, w: 22.85, uom: "cm" } }
])


db.inventory.find( {} )

  • select (단일조건)
db.inventory.find( { item: "canvas" } )

db.inventory.find( { status: "D" } )
SELECT * FROM inventory WHERE status = "D"

--위 두 쿼리는 rdb 와 mongodb(nosql) 의 쿼리비교이다. (동일한 결과 값)


db.inventory.find( { status: { $in: [ "A", "D" ] } } )
SELECT * FROM inventory WHERE status in ("A", "D")


db.inventory.find( { status: "A", qty: { $lt: 30 } } )

--$lt 는 < 을 뜻한다. $qte 이상을 뜻함 

SELECT * FROM inventory WHERE status = "A" AND qty < 30


db.inventory.find( { $or: [ { status: "A" }, { qty: { $lt: 30 } } ] } )

SELECT * FROM inventory WHERE status = "A" OR qty < 30

-- like 처럼 사용하기

db.inventory.find( {
     status: "A",
     $or: [ { qty: { $lt: 30 } }, { item: /^p/ } ]
} )


SELECT * FROM inventory WHERE status = "A" AND ( qty < 30 OR item LIKE "p%")
  • update

db.inventory.updateOne(
   { item: "paper" },
   {
     $set: { "size.uom": "cm", status: "P" },
     $currentDate: { lastModified: true }
   }
)


db.inventory.updateMany(
   { "qty": { $lt: 50 } },
   {
     $set: { "size.uom": "in", status: "P" },
     $currentDate: { lastModified: true }
   }
)


db.inventory.replaceOne(
   { item: "paper" },
   { item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 40 } ] }
)
  • delete

db.inventory.deleteMany({})

db.inventory.deleteMany({ status : "A" })


db.inventory.deleteOne( { status: "D" } )

-aggregate

  • $limit
db.article.aggregate(
    { $limit : 5 }
); 

-- sql limit 와 같다.
  • $sort

db.users.aggregate(
   [
     { $sort : { age : -1, posts: 1 } }
   ]
)

--오름차순 정렬 (-1 은 내림차순)
  • $skip
db.article.aggregate(
    { $skip : 5 }
);

--처음부터 5개 스킵
  • $match
db.articles.aggregate(
    [ { $match : { author : "dave" } } ]
);

--저자가 dave 인애들
  • $count

db.scores.aggregate(
  [
    {
      $match: {
        score: {
          $gt: 80
        }
      }
    },
    {
      $count: "passing_scores"
    }
  ]
)
-- passing_scores 80점보다 높은 스코어 갯수