MongoDB는 NoSQL이라 고정된 스키마나 JOIN이 존재하지 않고 동적 스키마형 문서를 사용합니다. 몽고디비에서는 그러한 동적 스키마형 문서를 Binary JSON(JavaScript Object Notaion) 라고 부릅니다.
JSON 형태기 때문에 직관적이라 개발이 편리하고, 읽기 및 쓰기 성능이 뛰어나서 속도가 매우 빠릅니다.
RDB와 MongoDB 용어를 비교하는 경우 아래와 같습니다.
1
| > db.<collection 이름>.find()
|
1
| > db.<collection 이름>.find({ "books" : "Gravity" })
|
1
| > db.<collection 이름>.find({ "views" : {$lte:30} })
|
1
| > db.<collection 이름>.find({},{ "\_id" : false, "title" : true })
|
1
| > db.<collection 이름>.find({ "comments" : {$elemMatch : { "name" : "Charles" }}})
|
1
| > db.cities.find({ "name" : "Minneapolis" }).pretty()
|
1
| > db.<collection 이름>.find({},{ "name" : true }).sort({ "name" : -1 })
|
1
| > db.<collection 이름>.find({},{ "name" : true }).sort({ "\_id" : -1 , "name" : 1 }}
|
1
| > db.<collection 이름>.find().limit(5)
|
1
| > db.<collection 이름>.find().skip(2)
|
1
2
3
4
5
6
| > db.people.insert( [
{ name: "Abet", age: 19 },
{ name: "Betty", age: 20 },
{ name: "Charlie", age: 23, skills: [ "mongodb", "nodejs"] },
{ name: "David", age: 23, score: 20 }
])
|
1
2
| > db.people.update( { name: "Abet" }, { $set: { age: 20 } } )
> WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
|
1
2
| > db.people.update( { name: "David" }, { $unset: { score: 1 } } )
> WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
|
1
2
3
4
5
6
7
| > db.people.update( { name: "Elly" }, { name: "Elly", age: 17 }, { upsert: true } )
WriteResult({
"nMatched" : 0,
"nUpserted" : 1,
"nModified" : 0,
"_id" : ObjectId("56c893ffc694e4e7c8594240")
})
|
1
2
3
4
5
6
| > db.people.update(
{ age: { $lte: 20 } },
{ $set: { score: 10 } },
{ multi: true }
)
> WriteResult({ "nMatched" : 3, "nUpserted" : 0, "nModified" : 0 })
|
1
2
3
4
5
| > db.people.update(
{ name: "Charlie" },
{ $push: { skills: "angularjs" } }
)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
|
1
2
3
4
5
6
7
8
9
10
11
| > db.people.update(
{ name: "Charlie" },
{ $push: {
skills: {
$each: [ "c++", "java" ],
$sort: 1
}
}
}
)
> WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
|
1
2
3
4
| > db.people.update(
{ name: "Charlie" },
{ $pull: { skills: "mongodb" } }
)
|
1
2
3
4
| > db.products.createIndex(
{ item: 1, quantity: -1 } ,
{ name: "query for inventory" }
)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| > db.cities.getIndexes()
[
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "test.cities"
},
{
"v" : 2,
"key" : {
"_id" : 1,
"checkins" : -1
},
"name" : "_id_1_checkins_-1",
"background" : true,
"ns" : "test.cities"
},
{
"v" : 2,
"key" : {
"geolocation" : "2dsphere",
"_id" : 1,
"checkins" : -1
},
"name" : "geolocation_2dsphere__id_1_checkins_-1",
"ns" : "test.cities",
"background" : true,
"2dsphereIndexVersion" : 3
}...
|
1
2
3
4
5
| var animalSchema = new Schema({
name: String,
type: String,
tags: { type: [String], index: true } // animal의 tag를 인덱스로 지정
});
|
1
| animalSchema.index({ name: 1, type: -1 }); // schema level
|
댓글남기기