지형인덱스
2d : 좌표(x, y)를 가지고 평면 계산 = 하나의 인덱스
2dsphere : 지구와 같은 구 형태의 지형 기반 계산 , 좌표 쌍 또는 GeoJson (위치와 상관없이 인덱스, 복합 인덱스) 보유
# geotest 사용해서 임의 좌표를 주자.
use geotest
var baseLng = 127.01145;
var baseLat = 37.49101;
var diffLng = 126.9988212;
var diffLat = 37.4952724;
var categories = ['커피', '은행', '편의점'];
for (var i = 1; i<=100; i++){
var myLng = baseLng + (Math.random() * diffLng);
var myLat = baseLat + (Math.random() * diffLat);
var myCategories = categories [Math.floor(Math.random() * categories.length)];
db.places.save({location : [myLng, myLat],
category : myCategories});
}
> use geotest
switched to db geotest
> var baseLng = 127.01145;
> var baseLat = 37.49101;
> var diffLng = 126.9988212;
> var diffLat = 37.4952724;
> var categories = ['커피', '은행', '편의점'];
>
> for (var i = 1; i<=100; i++){
... var myLng = baseLng + (Math.random() * diffLng); // 어디에서 어디까지 랜덤의 갯수
... var myLat = baseLat + (Math.random() * diffLat);
... var myCategories = categories [Math.floor(Math.random() * categories.length)]; // floor 내림
... db.places.save({location : [myLng, myLat],
... category : myCategories});
... }
WriteResult({ "nInserted" : 1 })
> db.places.find()
{ "_id" : ObjectId("60c8afd66285787dbd798d2a"), "location" : [ 162.86695940959004, 56.88332669836795 ], "category" : "커피" }
{ "_id" : ObjectId("60c8afd66285787dbd798d2b"), "location" : [ 224.95730987796728, 50.14007013218702 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d2c"), "location" : [ 154.99304567347235, 46.092820840061975 ], "category" : "은행" }
{ "_id" : ObjectId("60c8afd66285787dbd798d2d"), "location" : [ 133.41728381718875, 39.48196192554386 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d2e"), "location" : [ 147.36829466332017, 64.77647649105594 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d2f"), "location" : [ 249.53011952331192, 68.799039901291 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d30"), "location" : [ 171.16699622025513, 47.519560575489386 ], "category" : "커피" }
{ "_id" : ObjectId("60c8afd66285787dbd798d31"), "location" : [ 177.702425103313, 50.602822340148066 ], "category" : "커피" }
{ "_id" : ObjectId("60c8afd66285787dbd798d32"), "location" : [ 253.022687756172, 69.65028940219193 ], "category" : "은행" }
{ "_id" : ObjectId("60c8afd66285787dbd798d33"), "location" : [ 183.3715069518895, 56.11079929641739 ], "category" : "커피" }
{ "_id" : ObjectId("60c8afd66285787dbd798d34"), "location" : [ 155.42183830924023, 63.28284519280565 ], "category" : "커피" }
{ "_id" : ObjectId("60c8afd66285787dbd798d35"), "location" : [ 228.502043581323, 73.40455187178347 ], "category" : "은행" }
{ "_id" : ObjectId("60c8afd66285787dbd798d36"), "location" : [ 208.8060104437858, 39.997311062603664 ], "category" : "은행" }
{ "_id" : ObjectId("60c8afd66285787dbd798d37"), "location" : [ 215.74799328283666, 47.0237427334247 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d38"), "location" : [ 188.47307601407618, 42.64955932997145 ], "category" : "은행" }
{ "_id" : ObjectId("60c8afd66285787dbd798d39"), "location" : [ 127.08781707481076, 62.86039226433685 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d3a"), "location" : [ 138.74752218255395, 39.521715761892374 ], "category" : "은행" }
{ "_id" : ObjectId("60c8afd66285787dbd798d3b"), "location" : [ 248.9392793442475, 57.92964915626163 ], "category" : "커피" }
{ "_id" : ObjectId("60c8afd66285787dbd798d3c"), "location" : [ 223.25129149313733, 40.12901927852836 ], "category" : "커피" }
{ "_id" : ObjectId("60c8afd66285787dbd798d3d"), "location" : [ 230.9556464489218, 74.22250949865939 ], "category" : "편의점" }
Type "it" for more
> db.places.find().count()
100
>
Q1) 인덱스를 작성한다.
: ensureIndex → 인덱스를 추가 하겠다.
db.places.getIndexes() - 확인
db.places.ensureIndex({location:"2d", category:1});
db.places.getIndexes() - 재 확인
> db.places.getIndexes()
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
> db.places.ensureIndex({location:"2d", category:1});
{
"ok" : 0,
"errmsg" : "Index build failed: 0b4b7c90-f3e5-4954-a371-6e7dbaed69b7: Collection geotest.places ( af916243-e677-49b8-a5c3-19b121766d1c ) :: caused by :: point not in interval of [ -180, 180 ] :: caused by :: { _id: ObjectId('60c8afd66285787dbd798d2b'), location: [ 224.9573098779673, 50.14007013218702 ], category: \"편의점\" }",
"code" : 13027,
"codeName" : "Location13027"
}
오류 발생 : 에러 메세지 확인하기
"errmsg" : "Index build failed: 0b4b7c90-f3e5-4954-a371-6e7dbaed69b7:
Collection geotest.places ( af916243-e677-49b8-a5c3-19b121766d1c ) ::
caused by :: point not in interval of [ -180, 180 ] :: caused by ::
{ _id: ObjectId('60c8afd66285787dbd798d2b'),
location: [ 224.9573098779673, 50.14007013218702 ], category: \"편의점\" }"
// 오류메세지 :[-180, 180] 간격이 아닌 지점에 의해 발생
Q2) [-180, 180] 범위를 벗어나는 문서를 삭제 후 다시 추가하자.
2-1) 먼저 [-180, 180] 범위를 벗어나는 문서를 찾아보자.
: -180은 범위 속하지 않으므로 180 이상의 문서를 찾자
db.places.find({"location" : {$gte :180}});
> db.places.find({"location":{$gte:180}});
{ "_id" : ObjectId("60c8afd66285787dbd798d2b"), "location" : [ 224.95730987796728, 50.14007013218702 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d2f"), "location" : [ 249.53011952331192, 68.799039901291 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d32"), "location" : [ 253.022687756172, 69.65028940219193 ], "category" : "은행" }
{ "_id" : ObjectId("60c8afd66285787dbd798d33"), "location" : [ 183.3715069518895, 56.11079929641739 ], "category" : "커피" }
{ "_id" : ObjectId("60c8afd66285787dbd798d35"), "location" : [ 228.502043581323, 73.40455187178347 ], "category" : "은행" }
{ "_id" : ObjectId("60c8afd66285787dbd798d36"), "location" : [ 208.8060104437858, 39.997311062603664 ], "category" : "은행" }
{ "_id" : ObjectId("60c8afd66285787dbd798d37"), "location" : [ 215.74799328283666, 47.0237427334247 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d38"), "location" : [ 188.47307601407618, 42.64955932997145 ], "category" : "은행" }
{ "_id" : ObjectId("60c8afd66285787dbd798d3b"), "location" : [ 248.9392793442475, 57.92964915626163 ], "category" : "커피" }
{ "_id" : ObjectId("60c8afd66285787dbd798d3c"), "location" : [ 223.25129149313733, 40.12901927852836 ], "category" : "커피" }
{ "_id" : ObjectId("60c8afd66285787dbd798d3d"), "location" : [ 230.9556464489218, 74.22250949865939 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d3e"), "location" : [ 201.31001106076957, 62.64627922889267 ], "category" : "은행" }
{ "_id" : ObjectId("60c8afd66285787dbd798d3f"), "location" : [ 200.28746887184855, 41.485781495037095 ], "category" : "은행" }
{ "_id" : ObjectId("60c8afd66285787dbd798d42"), "location" : [ 213.75302078696893, 60.965789843929976 ], "category" : "커피" }
{ "_id" : ObjectId("60c8afd66285787dbd798d43"), "location" : [ 248.96038742526517, 67.8144240118457 ], "category" : "은행" }
{ "_id" : ObjectId("60c8afd66285787dbd798d44"), "location" : [ 252.21814751172406, 65.77911997580836 ], "category" : "커피" }
{ "_id" : ObjectId("60c8afd66285787dbd798d45"), "location" : [ 197.326230902021, 59.94267224062471 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d46"), "location" : [ 191.93284717349925, 61.63068462733777 ], "category" : "커피" }
{ "_id" : ObjectId("60c8afd66285787dbd798d48"), "location" : [ 241.01669140204277, 70.78142546115458 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d49"), "location" : [ 250.76182334592858, 72.0978405005371 ], "category" : "은행" }
Type "it" for more
> db.places.find({"location":{$gte:180}}).count();
61
2-2) [180] 범위를 벗어나는 문서를 삭제하자.
db.places.deleteMany({"location": {$gte: 180}});
> db.places.deleteMany({"location":{$gte:180}});
{ "acknowledged" : true, "deletedCount" : 61 }
2-3) 다시 인덱스를 추가 후 확인 하자.
db.places.ensureIndex({location:"2d", category:1});
db.places.getIndexes();
> db.places.ensureIndex({location:"2d", category:1});
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
> db.places.getIndexes();
[
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_"
},
{
"v" : 2,
"key" : {
"location" : "2d",
"category" : 1
},
"name" : "location_2d_category_1"
}
]
Q3) 편의점을 찾아보자.
db.places.find({category:'편의점'});
db.places.find({category:'편의점'}).count();
> db.places.find({category:'편의점'});
{ "_id" : ObjectId("60c8afd66285787dbd798d2d"), "location" : [ 133.41728381718875, 39.48196192554386 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d2e"), "location" : [ 147.36829466332017, 64.77647649105594 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d39"), "location" : [ 127.08781707481076, 62.86039226433685 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d47"), "location" : [ 133.3290570143667, 52.094232466716754 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d4c"), "location" : [ 131.54279095142155, 63.29511107666771 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d54"), "location" : [ 135.14905294083408, 45.55809021337765 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d57"), "location" : [ 157.811003283536, 44.347829904129824 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d5b"), "location" : [ 144.04025034941506, 63.92484208356893 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d60"), "location" : [ 165.61758455043793, 59.827339814987255 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d61"), "location" : [ 157.52293628319262, 54.00702473784698 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d68"), "location" : [ 141.3779552094182, 48.27048887438694 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d69"), "location" : [ 171.40291499552532, 74.7718065583538 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d7b"), "location" : [ 158.18118877703827, 50.901625279766144 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d7c"), "location" : [ 169.2744414391853, 57.19524104061881 ], "category" : "편의점" }
> db.places.find({category:'편의점'}).count();
14
>
Q4) 은행을 찾아보자.
db.places.find({category:'은행'});
db.places.find({category:'은행'}).count();
> db.places.find({category:'은행'});
{ "_id" : ObjectId("60c8afd66285787dbd798d2c"), "location" : [ 154.99304567347235, 46.092820840061975 ], "category" : "은행" }
{ "_id" : ObjectId("60c8afd66285787dbd798d3a"), "location" : [ 138.74752218255395, 39.521715761892374 ], "category" : "은행" }
{ "_id" : ObjectId("60c8afd66285787dbd798d41"), "location" : [ 145.81479995530472, 62.921733653988134 ], "category" : "은행" }
{ "_id" : ObjectId("60c8afd66285787dbd798d4b"), "location" : [ 165.40499506652185, 61.49508167235584 ], "category" : "은행" }
{ "_id" : ObjectId("60c8afd66285787dbd798d52"), "location" : [ 146.88837515604106, 46.43370762955308 ], "category" : "은행" }
{ "_id" : ObjectId("60c8afd66285787dbd798d53"), "location" : [ 174.83295078178557, 40.580658355442736 ], "category" : "은행" }
{ "_id" : ObjectId("60c8afd66285787dbd798d58"), "location" : [ 177.89218436778708, 62.65255363646997 ], "category" : "은행" }
{ "_id" : ObjectId("60c8afd66285787dbd798d5e"), "location" : [ 169.38783979764685, 52.97210669577137 ], "category" : "은행" }
{ "_id" : ObjectId("60c8afd66285787dbd798d5f"), "location" : [ 138.87626864847564, 38.64598542933119 ], "category" : "은행" }
{ "_id" : ObjectId("60c8afd66285787dbd798d65"), "location" : [ 144.35747967681658, 51.15572625492331 ], "category" : "은행" }
{ "_id" : ObjectId("60c8afd66285787dbd798d86"), "location" : [ 175.39911705160003, 51.5991100471397 ], "category" : "은행" }
{ "_id" : ObjectId("60c8afd66285787dbd798d8a"), "location" : [ 147.39455027402195, 42.406111800401696 ], "category" : "은행" }
> db.places.find({category:'은행'}).count();
12
>
Q5) 커피를 찾아보자.
db.places.find({category:'커피'});
db.places.find({category:'커피'}).count();
> db.places.find({category:'커피'});
{ "_id" : ObjectId("60c8afd66285787dbd798d2a"), "location" : [ 162.86695940959004, 56.88332669836795 ], "category" : "커피" }
{ "_id" : ObjectId("60c8afd66285787dbd798d30"), "location" : [ 171.16699622025513, 47.519560575489386 ], "category" : "커피" }
{ "_id" : ObjectId("60c8afd66285787dbd798d31"), "location" : [ 177.702425103313, 50.602822340148066 ], "category" : "커피" }
{ "_id" : ObjectId("60c8afd66285787dbd798d34"), "location" : [ 155.42183830924023, 63.28284519280565 ], "category" : "커피" }
{ "_id" : ObjectId("60c8afd66285787dbd798d40"), "location" : [ 156.75019149537798, 74.83962403343861 ], "category" : "커피" }
{ "_id" : ObjectId("60c8afd66285787dbd798d5d"), "location" : [ 179.10523344714682, 71.67982556744506 ], "category" : "커피" }
{ "_id" : ObjectId("60c8afd66285787dbd798d6e"), "location" : [ 128.52321998573385, 67.21900401704173 ], "category" : "커피" }
{ "_id" : ObjectId("60c8afd66285787dbd798d71"), "location" : [ 134.4099749312985, 45.66816530696374 ], "category" : "커피" }
{ "_id" : ObjectId("60c8afd66285787dbd798d72"), "location" : [ 179.1383369218369, 66.44877816828838 ], "category" : "커피" }
{ "_id" : ObjectId("60c8afd66285787dbd798d73"), "location" : [ 158.5049872086491, 52.82913348167578 ], "category" : "커피" }
{ "_id" : ObjectId("60c8afd66285787dbd798d7a"), "location" : [ 146.8690710192428, 67.75129670921774 ], "category" : "커피" }
{ "_id" : ObjectId("60c8afd66285787dbd798d84"), "location" : [ 169.8754248927329, 62.29427544209156 ], "category" : "커피" }
{ "_id" : ObjectId("60c8afd66285787dbd798d8b"), "location" : [ 157.52601557453298, 39.93516943291843 ], "category" : "커피" }
>
> db.places.find({category:'커피'}).count();
13
>
Q6) ○○근처에 편의점, 은행, 커피 중 가장 가까운 10개를 찾아보자.
db.places.find({location : {$near : [126.8988122,37.4852754] }}).limit(10);
> db.places.find({location:{$near:[126.8988122,37.4852754]}}).limit(10);
{ "_id" : ObjectId("60c8afd66285787dbd798d2d"), "location" : [ 133.41728381718875, 39.48196192554386 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d71"), "location" : [ 134.4099749312985, 45.66816530696374 ], "category" : "커피" }
{ "_id" : ObjectId("60c8afd66285787dbd798d54"), "location" : [ 135.14905294083408, 45.55809021337765 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d3a"), "location" : [ 138.74752218255395, 39.521715761892374 ], "category" : "은행" }
{ "_id" : ObjectId("60c8afd66285787dbd798d5f"), "location" : [ 138.87626864847564, 38.64598542933119 ], "category" : "은행" }
{ "_id" : ObjectId("60c8afd66285787dbd798d47"), "location" : [ 133.3290570143667, 52.094232466716754 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d68"), "location" : [ 141.3779552094182, 48.27048887438694 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d8a"), "location" : [ 147.39455027402195, 42.406111800401696 ], "category" : "은행" }
{ "_id" : ObjectId("60c8afd66285787dbd798d52"), "location" : [ 146.88837515604106, 46.43370762955308 ], "category" : "은행" }
{ "_id" : ObjectId("60c8afd66285787dbd798d65"), "location" : [ 144.35747967681658, 51.15572625492331 ], "category" : "은행" }
>
Q7) 문서 a 를 참고하여 a 에서 가장 가까운 5개의 편의점, 은행, 커피를 찾아보자.
a= { "_id" : ObjectId("60c8afd66285787dbd798d3a"),
"location" : [ 138.74752218255395, 39.521715761892374 ], "category" : "은행" }
db.places.find({"location":[138.74752218255395, 39.521715761892374]});
db.places.find({location : {$near:[137,40]}}).limit(5)
> db.places.find({"location":[138.74752218255395, 39.521715761892374]});
{ "_id" : ObjectId("60c8afd66285787dbd798d3a"), "location" : [ 138.74752218255395, 39.521715761892374 ], "category" : "은행" }
> db.places.find({location : {$near:[137,40]}}).limit(5)
{ "_id" : ObjectId("60c8afd66285787dbd798d3a"), "location" : [ 138.74752218255395, 39.521715761892374 ], "category" : "은행" }
{ "_id" : ObjectId("60c8afd66285787dbd798d5f"), "location" : [ 138.87626864847564, 38.64598542933119 ], "category" : "은행" }
{ "_id" : ObjectId("60c8afd66285787dbd798d2d"), "location" : [ 133.41728381718875, 39.48196192554386 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d54"), "location" : [ 135.14905294083408, 45.55809021337765 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d71"), "location" : [ 134.4099749312985, 45.66816530696374 ], "category" : "커피" }
>
Q8) ○○ 근처에서 근방 0.25 거리에 있는 은행을 찾아보자.
> db.places.find({location :{$near : [0,0.25]}, category : '은행' });
> db.places.find({location :{$near : [0,0.25]},category:'은행'});
{ "_id" : ObjectId("60c8afd66285787dbd798d5f"), "location" : [ 138.87626864847564, 38.64598542933119 ], "category" : "은행" }
{ "_id" : ObjectId("60c8afd66285787dbd798d3a"), "location" : [ 138.74752218255395, 39.521715761892374 ], "category" : "은행" }
{ "_id" : ObjectId("60c8afd66285787dbd798d65"), "location" : [ 144.35747967681658, 51.15572625492331 ], "category" : "은행" }
{ "_id" : ObjectId("60c8afd66285787dbd798d8a"), "location" : [ 147.39455027402195, 42.406111800401696 ], "category" : "은행" }
{ "_id" : ObjectId("60c8afd66285787dbd798d52"), "location" : [ 146.88837515604106, 46.43370762955308 ], "category" : "은행" }
{ "_id" : ObjectId("60c8afd66285787dbd798d41"), "location" : [ 145.81479995530472, 62.921733653988134 ], "category" : "은행" }
{ "_id" : ObjectId("60c8afd66285787dbd798d2c"), "location" : [ 154.99304567347235, 46.092820840061975 ], "category" : "은행" }
{ "_id" : ObjectId("60c8afd66285787dbd798d4b"), "location" : [ 165.40499506652185, 61.49508167235584 ], "category" : "은행" }
{ "_id" : ObjectId("60c8afd66285787dbd798d5e"), "location" : [ 169.38783979764685, 52.97210669577137 ], "category" : "은행" }
{ "_id" : ObjectId("60c8afd66285787dbd798d53"), "location" : [ 174.83295078178557, 40.580658355442736 ], "category" : "은행" }
{ "_id" : ObjectId("60c8afd66285787dbd798d86"), "location" : [ 175.39911705160003, 51.5991100471397 ], "category" : "은행" }
{ "_id" : ObjectId("60c8afd66285787dbd798d58"), "location" : [ 177.89218436778708, 62.65255363646997 ], "category" : "은행" }
>
Q9) ○○근처에서 가장 멀리있는 편의점을 3개 찾아보자.
db.places.find({location : {$near : [0,0.25]}, category : '편의점' }).limit(3).sort({"location":-1})
> db.places.find({location : {$near : [0,0.25]}, category : '편의점' })
{ "_id" : ObjectId("60c8afd66285787dbd798d2d"), "location" : [ 133.41728381718875, 39.48196192554386 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d39"), "location" : [ 127.08781707481076, 62.86039226433685 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d54"), "location" : [ 135.14905294083408, 45.55809021337765 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d47"), "location" : [ 133.3290570143667, 52.094232466716754 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d4c"), "location" : [ 131.54279095142155, 63.29511107666771 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d68"), "location" : [ 141.3779552094182, 48.27048887438694 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d5b"), "location" : [ 144.04025034941506, 63.92484208356893 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d2e"), "location" : [ 147.36829466332017, 64.77647649105594 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d57"), "location" : [ 157.811003283536, 44.347829904129824 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d7b"), "location" : [ 158.18118877703827, 50.901625279766144 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d61"), "location" : [ 157.52293628319262, 54.00702473784698 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d60"), "location" : [ 165.61758455043793, 59.827339814987255 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d7c"), "location" : [ 169.2744414391853, 57.19524104061881 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d69"), "location" : [ 171.40291499552532, 74.7718065583538 ], "category" : "편의점" }
> db.places.find({location : {$near : [0,0.25]}, category : '편의점' }).limit(3).sort({"location":-1})
{ "_id" : ObjectId("60c8afd66285787dbd798d69"), "location" : [ 171.40291499552532, 74.7718065583538 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d7c"), "location" : [ 169.2744414391853, 57.19524104061881 ], "category" : "편의점" }
{ "_id" : ObjectId("60c8afd66285787dbd798d60"), "location" : [ 165.61758455043793, 59.827339814987255 ], "category" : "편의점" }
>
Q10) ○○근처에서 가장 멀리있는 은행과의 가운데 있는 지점의 편의점을 찾아보자.
mongofiles
일반적으로 mongodb 저장할 수 있는 문서의 크기 16MB 가 상한이다.
16MB 이상은 GridFS 사용한다.
GridFS는 Mongodb를 분할해서 (입,출력) 하기 위한 인터페이스 이다.
명령어
: put, get, search, delete, option (-v : 이중화, -d : DB지정)
[형식]
mongofiles <options> <connection-string> <command> <filename or _id>
# mongofiles 도움말 확인
C:\Test>mongofiles --help
# mongofile 시작 및 디렉터리 확인
C:\Users\hyeri>cd\
C:\>cd test // test 폴더
C:\Test>dir/w
C 드라이브의 볼륨에는 이름이 없습니다.
볼륨 일련 번호: BE80-C42F
C:\Test 디렉터리
[.] [..] 1.jpg 2.jpg
210422_hyeri.py 210422_소모임과제.py 3.jpg a.txt
atest.py b.txt c.txt d.txt
data.txt for_01.py for_02.py for_03.py
scott.sql while_01.py while_02.py
17개 파일 27,721 바이트
2개 디렉터리 415,039,836,160 바이트 남음
C:\Test>dir *.txt // txt 파일확인
C 드라이브의 볼륨에는 이름이 없습니다.
볼륨 일련 번호: BE80-C42F
C:\Test 디렉터리
2021-06-15 오후 12:42 16 a.txt
2021-05-03 오후 02:26 17 b.txt
2021-06-15 오후 12:47 26 c.txt
2021-05-03 오후 02:26 9 d.txt
2021-05-05 오후 02:19 770 data.txt
5개 파일 838 바이트
0개 디렉터리 415,039,811,584 바이트 남음
C:\Test>dir *.jpg // jpg 파일확인
C 드라이브의 볼륨에는 이름이 없습니다.
볼륨 일련 번호: BE80-C42F
C:\Test 디렉터리
2021-05-17 오후 01:37 4,775 1.jpg
2021-05-17 오후 01:37 7,755 2.jpg
2021-05-17 오후 01:37 4,521 3.jpg
3개 파일 17,051 바이트
0개 디렉터리 415,040,487,424 바이트 남음
Q1) images 데이터 베이스에 1.jpg 올리기
mongofiles -v -d images put 1.jpg
# txt, json 파일도 올리기
C:\Test>mongofiles -v -d images put 1.jpg
2021-06-15T14:47:54.398+0900 using write concern: &{majority false 0}
2021-06-15T14:47:54.468+0900 will listen for SIGTERM, SIGINT, and SIGKILL
2021-06-15T14:47:55.091+0900 connected to node type: standalone
2021-06-15T14:47:55.092+0900 connected to: mongodb://localhost/
2021-06-15T14:47:55.092+0900 handling mongofiles 'put' command...
2021-06-15T14:47:55.092+0900 adding gridFile: 1.jpg
2021-06-15T14:47:55.101+0900 creating GridFS gridFile '' from local gridFile '1.jpg'
2021-06-15T14:47:55.137+0900 copied 4775 bytes to server
2021-06-15T14:47:55.137+0900 added gridFile: 1.jpg
/************************************
2021-06-15T14:47:55.101+0900 creating GridFS gridFile ''(파일명 변경) from local gridFile '1.jpg'
2021-06-15T14:47:55.137+0900 copied 4775 bytes to server
2021-06-15T14:47:55.137+0900 added gridFile: 1.jpg (위에 변경하면 이름 변경됨)
*************************************/
C:\Test>mongofiles -v -d images put 2.jpg
2021-06-15T14:53:51.216+0900 using write concern: &{majority false 0}
2021-06-15T14:53:51.281+0900 will listen for SIGTERM, SIGINT, and SIGKILL
2021-06-15T14:53:51.901+0900 connected to node type: standalone
2021-06-15T14:53:51.901+0900 connected to: mongodb://localhost/
2021-06-15T14:53:51.902+0900 handling mongofiles 'put' command...
2021-06-15T14:53:51.902+0900 adding gridFile: 2.jpg
2021-06-15T14:53:51.907+0900 creating GridFS gridFile '' from local gridFile '2.jpg'
2021-06-15T14:53:51.910+0900 copied 7755 bytes to server
2021-06-15T14:53:51.911+0900 added gridFile: 2.jpg
C:\Test>mongofiles -v -d images put 3.jpg
2021-06-15T14:53:57.692+0900 using write concern: &{majority false 0}
2021-06-15T14:53:57.750+0900 will listen for SIGTERM, SIGINT, and SIGKILL
2021-06-15T14:53:58.367+0900 connected to node type: standalone
2021-06-15T14:53:58.367+0900 connected to: mongodb://localhost/
2021-06-15T14:53:58.367+0900 handling mongofiles 'put' command...
2021-06-15T14:53:58.367+0900 adding gridFile: 3.jpg
2021-06-15T14:53:58.368+0900 creating GridFS gridFile '' from local gridFile '3.jpg'
2021-06-15T14:53:58.371+0900 copied 4521 bytes to server
2021-06-15T14:53:58.372+0900 added gridFile: 3.jpg
C:\Test>mongofiles -v -d images put a.txt
2021-06-15T14:54:57.775+0900 using write concern: &{majority false 0}
2021-06-15T14:54:57.834+0900 will listen for SIGTERM, SIGINT, and SIGKILL
2021-06-15T14:54:58.456+0900 connected to node type: standalone
2021-06-15T14:54:58.457+0900 connected to: mongodb://localhost/
2021-06-15T14:54:58.459+0900 handling mongofiles 'put' command...
2021-06-15T14:54:58.459+0900 adding gridFile: a.txt
2021-06-15T14:54:58.461+0900 creating GridFS gridFile '' from local gridFile 'a.txt'
2021-06-15T14:54:58.464+0900 copied 16 bytes to server
2021-06-15T14:54:58.464+0900 added gridFile: a.txt
C:\Test>mongofiles -v -d images put b.txt
2021-06-15T14:55:02.761+0900 using write concern: &{majority false 0}
2021-06-15T14:55:02.820+0900 will listen for SIGTERM, SIGINT, and SIGKILL
2021-06-15T14:55:03.440+0900 connected to node type: standalone
2021-06-15T14:55:03.440+0900 connected to: mongodb://localhost/
2021-06-15T14:55:03.442+0900 handling mongofiles 'put' command...
2021-06-15T14:55:03.443+0900 adding gridFile: b.txt
2021-06-15T14:55:03.444+0900 creating GridFS gridFile '' from local gridFile 'b.txt'
2021-06-15T14:55:03.448+0900 copied 17 bytes to server
2021-06-15T14:55:03.449+0900 added gridFile: b.txt
C:\Test>mongofiles -v -d images put c.txt
2021-06-15T14:55:07.317+0900 using write concern: &{majority false 0}
2021-06-15T14:55:07.377+0900 will listen for SIGTERM, SIGINT, and SIGKILL
2021-06-15T14:55:08.006+0900 connected to node type: standalone
2021-06-15T14:55:08.007+0900 connected to: mongodb://localhost/
2021-06-15T14:55:08.008+0900 handling mongofiles 'put' command...
2021-06-15T14:55:08.009+0900 adding gridFile: c.txt
2021-06-15T14:55:08.011+0900 creating GridFS gridFile '' from local gridFile 'c.txt'
2021-06-15T14:55:08.015+0900 copied 26 bytes to server
2021-06-15T14:55:08.015+0900 added gridFile: c.txt
C:\Test>mongofiles -v -d images put c.json
2021-06-15T14:57:29.703+0900 using write concern: &{majority false 0}
2021-06-15T14:57:29.762+0900 will listen for SIGTERM, SIGINT, and SIGKILL
2021-06-15T14:57:30.375+0900 connected to node type: standalone
2021-06-15T14:57:30.376+0900 connected to: mongodb://localhost/
2021-06-15T14:57:30.376+0900 handling mongofiles 'put' command...
2021-06-15T14:57:30.376+0900 adding gridFile: c.json
2021-06-15T14:57:30.377+0900 creating GridFS gridFile '' from local gridFile 'c.json'
2021-06-15T14:57:30.381+0900 copied 361 bytes to server
2021-06-15T14:57:30.381+0900 added gridFile: c.json
# 업로드 확인
C:\Test>mongo // mongo로 간다.
MongoDB shell version v4.4.6
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("2c44f18b-c10c-491a-9853-6bb996f3e18e") }
MongoDB server version: 4.4.6
---
The server generated these startup warnings when booting:
2021-06-10T11:12:37.324+09:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
2021-06-10T11:12:37.325+09:00: This server is bound to localhost. Remote systems will be unable to connect to this server. Start the server with --bind_ip <address> to specify which IP addresses it should serve responses from, or with --bind_ip_all to bind to all interfaces. If this behavior is desired, start the server with --bind_ip 127.0.0.1 to disable this warning
---
---
> show dbs
admin 0.000GB
config 0.000GB
geotest 0.000GB
geotest1 0.000GB
images 0.000GB
imges 0.032GB
local 0.000GB
my_score 0.001GB
my_test 0.001GB
test 0.000GB
> use images // 파일 올린 images 로 간 후
switched to db images
> show collections // collection 확인
fs.chunks // bson형태를 통해 put으로 올린 파일 내용 저장
fs.files //put 으로 올린 파일 정보 저장
Q2) fs.files 에 있는 파일의 목록을 확인하고 id를 찾아서 fs.chunks에서 데이터를 확인 하자.
db.fs.files.find()
> db.fs.files.find()
{ "_id" : ObjectId("60c8406fa3377d28b3e85b89"), "length" : NumberLong(7755), "chunkSize" : 261120, "uploadDate" : ISODate("2021-06-15T05:53:51.910Z"), "filename" : "2.jpg", "metadata" : { } }
{ "_id" : ObjectId("60c84076faf46ea165f3e5ed"), "length" : NumberLong(4521), "chunkSize" : 261120, "uploadDate" : ISODate("2021-06-15T05:53:58.371Z"), "filename" : "3.jpg", "metadata" : { } }
{ "_id" : ObjectId("60c840b24c2456cd09d4712b"), "length" : NumberLong(16), "chunkSize" : 261120, "uploadDate" : ISODate("2021-06-15T05:54:58.464Z"), "filename" : "a.txt", "metadata" : { } }
{ "_id" : ObjectId("60c840b7f6015d3904306ace"), "length" : NumberLong(17), "chunkSize" : 261120, "uploadDate" : ISODate("2021-06-15T05:55:03.448Z"), "filename" : "b.txt", "metadata" : { } }
{ "_id" : ObjectId("60c840bcd78ecd7a0573249b"), "length" : NumberLong(26), "chunkSize" : 261120, "uploadDate" : ISODate("2021-06-15T05:55:08.015Z"), "filename" : "c.txt", "metadata" : { } }
{ "_id" : ObjectId("60c8414a650d9fa926ad2f95"), "length" : NumberLong(361), "chunkSize" : 261120, "uploadDate" : ISODate("2021-06-15T05:57:30.381Z"), "filename" : "c.json", "metadata" : { } }
{ "_id" : ObjectId("60c8c2ba346fc76dbfba1ea8"), "length" : NumberLong(4775), "chunkSize" : 261120, "uploadDate" : ISODate("2021-06-15T15:09:46.248Z"), "filename" : "1.jpg", "metadata" : { } }
{ "_id" : ObjectId("60c8c2d3036e3c17e287fdef"), "length" : NumberLong(16), "chunkSize" : 261120, "uploadDate" : ISODate("2021-06-15T15:10:11.884Z"), "filename" : "a.txt", "metadata" : { } }
{ "_id" : ObjectId("60c8c2de60ded74e659dd866"), "length" : NumberLong(26), "chunkSize" : 261120, "uploadDate" : ISODate("2021-06-15T15:10:22.639Z"), "filename" : "c.txt", "metadata" : { } }
{ "_id" : ObjectId("60c8c2e5cccb8205b4233aa8"), "length" : NumberLong(361), "chunkSize" : 261120, "uploadDate" : ISODate("2021-06-15T15:10:29.792Z"), "filename" : "c.json", "metadata" : { } }
>
db.fs.chunks.find()
// file_id 확인하자
> db.fs.chunks.find()
{ "_id" : ObjectId("60c8406fa3377d28b3e85b8a"), "files_id" : ObjectId("60c8406fa3377d28b3e85b89"), "n" : 0, "data" : BinData(0,"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") }
{ "_id" : ObjectId("60c84076faf46ea165f3e5ee"), "files_id" : ObjectId("60c84076faf46ea165f3e5ed"), "n" : 0, "data" : BinData(0,"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") }
{ "_id" : ObjectId("60c840b24c2456cd09d4712c"), "files_id" : ObjectId("60c840b24c2456cd09d4712b"), "n" : 0, "data" : BinData(0,"YWJjZGVmZw0KMTIzNDU2Nw==") }
{ "_id" : ObjectId("60c840b7f6015d3904306acf"), "files_id" : ObjectId("60c840b7f6015d3904306ace"), "n" : 0, "data" : BinData(0,"YWJjZGVmZw0KMTExMTExDQo=") }
{ "_id" : ObjectId("60c840bcd78ecd7a0573249c"), "files_id" : ObjectId("60c840bcd78ecd7a0573249b"), "n" : 0, "data" : BinData(0,"64yA7ZWc66+86rWt7Jqw66as64KY6528DQo=") }
{ "_id" : ObjectId("60c8414a650d9fa926ad2f96"), "files_id" : ObjectId("60c8414a650d9fa926ad2f95"), "n" : 0, "data" : BinData(0,"c3RyID0geyJ0aXRsZSI6IkV4YW1wbGUgU2NoZW1hIiwNCiAgICAgICAidHlwZSI6Im9iamVjdCIsDQogICAgICAgInByb3BlcnRpZXMiOnsNCiAgICAgICAgICAgImZpcnN0TmFtZSI6ew0KICAgICAgICAgICAgICAgInR5dHBlIjoic3RyaW5nIg0KICAgICAgICAgICB9LA0KICAgICAgICAgICAiYWdlIjp7DQogICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiJBZ2UgaW4geWVhcnMiLA0KICAgICAgICAgICAgICAgInR5cGUiOiJpbnRlZ2VyIiwNCiAgICAgICAgICAgICAgICJtaW5pbXVtIjowDQogICAgICAgICAgIH0NCiAgICAgICB9LA0KICAgICAgICJyZXF1aXJlZCI6WyJmaXJzdE5hbWUiLCJsYXN0TmFtZSJdDQogICAgICAgfQ==") }
{ "_id" : ObjectId("60c8c2ba346fc76dbfba1ea9"), "files_id" : ObjectId("60c8c2ba346fc76dbfba1ea8"), "n" : 0, "data" : BinData(0,"/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAQCAwMDAgQDAwMEBAQEBQkGBQUFBQsICAYJDQsNDQ0LDAwOEBQRDg8TDwwMEhgSExUWFxcXDhEZGxkWGhQWFxb/2wBDAQQEBAUFBQoGBgoWDwwPFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhb/wAARCADmAOYDASIAAhEBAxEB/8QAHQABAAAHAQEAAAAAAAAAAAAAAAEDBAUGCAkCB//EAEUQAAEDAwEEBQcICQIHAAAAAAEAAgMEBREGBxIhMQhBUWFxExQycoGRoQkiUmKCscHRFSMkJjNCkqKjFmMlQ2RzssLh/8QAGAEBAQEBAQAAAAAAAAAAAAAAAAECAwT/xAAeEQEBAAMAAgMBAAAAAAAAAAAAAQIDERIxBCFBE//aAAwDAQACEQMRAD8A3+REQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQERQyEEUXlz2tBLjgDiSeAVkvOtdHWgn9LarsdBu8/OrlDFj+pwQX1F8wvvSL2H2hxbWbTtOkjmKer84PujDlht/6Z+wO3EiHU1dcSOqjtM5z4F7WhBsCi1RvPT22ZRkts+l9T17uoyMgpwffIT8Fht5+UID95ll2asaQcb1befvayL8UG8CEhc9bx07NqVWwi26c0pQtPJxinqHD2mRo+CxG89L7b1XBzY9V0VA13VR2iBuPAva4oOm+8OopvDv9y5NXjb3tpuhd53tP1Lh3NtPWebj3RBqxC86q1Rd3F111Neq8u5+dXKaXP8AU4oOvt51Zpe0Z/Suo7RQgczVV8UWP6nBYdfukDsVs7i2t2naa3m82wV7Zz7o95cm3MY5286NjnHrLQSvQJAwOHgg6aX3phbBrfkQ6qq7iR1UVpqH59rmNHxWIXzp3bLqdpFs03qqvcORdTwQNPtdLn4LnySiDovoDpubIr29kN+ivWmpnHBfWUvl4B9uEuI9rQvumg9daO1rQir0nqe1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") }
{ "_id" : ObjectId("60c8c2d3036e3c17e287fdf0"), "files_id" : ObjectId("60c8c2d3036e3c17e287fdef"), "n" : 0, "data" : BinData(0,"YWJjZGVmZw0KMTIzNDU2Nw==") }
{ "_id" : ObjectId("60c8c2de60ded74e659dd867"), "files_id" : ObjectId("60c8c2de60ded74e659dd866"), "n" : 0, "data" : BinData(0,"64yA7ZWc66+86rWt7Jqw66as64KY6528DQo=") }
{ "_id" : ObjectId("60c8c2e5cccb8205b4233aa9"), "files_id" : ObjectId("60c8c2e5cccb8205b4233aa8"), "n" : 0, "data" : BinData(0,"c3RyID0geyJ0aXRsZSI6IkV4YW1wbGUgU2NoZW1hIiwNCiAgICAgICAidHlwZSI6Im9iamVjdCIsDQogICAgICAgInByb3BlcnRpZXMiOnsNCiAgICAgICAgICAgImZpcnN0TmFtZSI6ew0KICAgICAgICAgICAgICAgInR5dHBlIjoic3RyaW5nIg0KICAgICAgICAgICB9LA0KICAgICAgICAgICAiYWdlIjp7DQogICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiJBZ2UgaW4geWVhcnMiLA0KICAgICAgICAgICAgICAgInR5cGUiOiJpbnRlZ2VyIiwNCiAgICAgICAgICAgICAgICJtaW5pbXVtIjowDQogICAgICAgICAgIH0NCiAgICAgICB9LA0KICAgICAgICJyZXF1aXJlZCI6WyJmaXJzdE5hbWUiLCJsYXN0TmFtZSJdDQogICAgICAgfQ==") }
>
-- jpg
db.fs.chunks.find({files_id : ObjectId("60c8406fa3377d28b3e85b89")});
-- txt
db.fs.chunks.find({files_id : ObjectId("60c840b24c2456cd09d4712b")});
-- json
db.fs.chunks.find({files_id : ObjectId("60c8414a650d9fa926ad2f95")});
//c.json
> db.fs.chunks.find({files_id : ObjectId("60c8414a650d9fa926ad2f95")});
{ "_id" : ObjectId("60c8414a650d9fa926ad2f96"), "files_id" : ObjectId("60c8414a650d9fa926ad2f95"), "n" : 0, "data" : BinData(0,"c3RyID0geyJ0aXRsZSI6IkV4YW1wbGUgU2NoZW1hIiwNCiAgICAgICAidHlwZSI6Im9iamVjdCIsDQogICAgICAgInByb3BlcnRpZXMiOnsNCiAgICAgICAgICAgImZpcnN0TmFtZSI6ew0KICAgICAgICAgICAgICAgInR5dHBlIjoic3RyaW5nIg0KICAgICAgICAgICB9LA0KICAgICAgICAgICAiYWdlIjp7DQogICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiJBZ2UgaW4geWVhcnMiLA0KICAgICAgICAgICAgICAgInR5cGUiOiJpbnRlZ2VyIiwNCiAgICAgICAgICAgICAgICJtaW5pbXVtIjowDQogICAgICAgICAgIH0NCiAgICAgICB9LA0KICAgICAgICJyZXF1aXJlZCI6WyJmaXJzdE5hbWUiLCJsYXN0TmFtZSJdDQogICAgICAgfQ==") }
# 삭제
mongofiles -v -d images delete 1.jpg
Q3) 목록확인
mongofiles -v -d images list
C:\Test>mongofiles -v -d images list
2021-06-16T15:55:54.489+0900 using write concern: &{majority false 0}
2021-06-16T15:55:54.549+0900 will listen for SIGTERM, SIGINT, and SIGKILL
2021-06-16T15:55:55.174+0900 connected to node type: standalone
2021-06-16T15:55:55.175+0900 connected to: mongodb://localhost/
2021-06-16T15:55:55.175+0900 handling mongofiles 'list' command...
2.jpg 7755
3.jpg 4521
a.txt 16
b.txt 17
c.txt 26
c.json 361
1.jpg 4775
a.txt 16
c.txt 26
c.json 361
C:\Test>
Q4) d.mp4로 영상을 imges db에 put 한 다음 몽고 접속 후 use images로 이동해서 내용 확인
: 내용은 많으니 count로 갯수만 확인하자.
mongofiles -v -d images put d.mp4
db.fs.chunks.find().count()
141
db.fs.chunks.stats()
chunk_count_limit=0,chunk_max=5GB,chunk_size=10MB, - 속성으로 값 변함
C:\Test>mongofiles -v -d images put d.mp4
2021-06-16T15:56:51.454+0900 using write concern: &{majority false 0}
2021-06-16T15:56:51.511+0900 will listen for SIGTERM, SIGINT, and SIGKILL
2021-06-16T15:56:52.129+0900 connected to node type: standalone
2021-06-16T15:56:52.129+0900 connected to: mongodb://localhost/
2021-06-16T15:56:52.129+0900 handling mongofiles 'put' command...
2021-06-16T15:56:52.129+0900 adding gridFile: d.mp4
2021-06-16T15:56:52.130+0900 creating GridFS gridFile '' from local gridFile 'd.mp4'
2021-06-16T15:56:52.400+0900 copied 34184488 bytes to server
2021-06-16T15:56:52.400+0900 added gridFile: d.mp4
C:\Test>mongo
MongoDB shell version v4.4.6
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("808e9321-f6ab-41ee-9622-30a96d933d7d") }
MongoDB server version: 4.4.6
'''
---
> use images
switched to db images
> db.fs.chunks.find().count()
141
> db.fs.chunks.stats()
{
"ns" : "images.fs.chunks",
"size" : 34211104,
"count" : 141,
"avgObjSize" : 242631,
"storageSize" : 34402304,
"freeStorageSize" : 49152,
"capped" : false,
"wiredTiger" : {
"metadata" : {
"formatVersion" : 1
},
"creationString" : "access_pattern_hint=none,allocation_size=4KB,app_metadata=(formatVersion=1),assert=(commit_timestamp=none,durable_timestamp=none,read_timestamp=none,write_timestamp=off),block_allocation=best,block_compressor=snappy,cache_resident=false,checksum=on,colgroups=,collator=,columns=,dictionary=0,encryption=(keyid=,name=),exclusive=false,extractor=,format=btree,huffman_key=,huffman_value=,ignore_in_memory_cache_size=false,immutable=false,import=(enabled=false,file_metadata=,repair=false),internal_item_max=0,internal_key_max=0,internal_key_truncate=true,internal_page_max=4KB,key_format=q,key_gap=10,leaf_item_max=0,leaf_key_max=0,leaf_page_max=32KB,leaf_value_max=64MB,log=(enabled=true),lsm=(auto_throttle=true,bloom=true,bloom_bit_count=16,bloom_config=,bloom_hash_count=8,bloom_oldest=false,chunk_count_limit=0,chunk_max=5GB,chunk_size=10MB,merge_custom=(prefix=,start_generation=0,suffix=),merge_max=15,merge_min=0),memory_page_image_max=0,memory_page_max=10m,os_cache_dirty_max=0,os_cache_max=0,prefix_compression=false,prefix_compression_min=4,readonly=false,source=,split_deepen_min_child=0,split_deepen_per_child=0,split_pct=90,tiered=(chunk_size=1GB,tiers=),tiered_storage=(auth_token=,bucket=,local_retention=300,name=,object_target_size=10M),type=file,value_format=u,verbose=[],write_timestamp_usage=none",
"type" : "file",
"uri" : "statistics:table:collection-86-3696876612360350141",
"LSM" : {
"bloom filter false positives" : 0,
"bloom filter hits" : 0,
"bloom filter misses" : 0,
"bloom filter pages evicted from cache" : 0,
"bloom filter pages read into cache" : 0,
"bloom filters in the LSM tree" : 0,
"chunks in the LSM tree" : 0,
"highest merge generation in the LSM tree" : 0,
"queries that could have benefited from a Bloom filter that did not exist" : 0,
"total size of bloom filters" : 0,
"sleep for LSM checkpoint throttle" : 0,
"sleep for LSM merge throttle" : 0
},
"block-manager" : {
"allocations requiring file extension" : 146,
"blocks allocated" : 162,
"blocks freed" : 7,
"checkpoint size" : 34336768,
"file allocation unit size" : 4096,
"file bytes available for reuse" : 49152,
"file magic number" : 120897,
"file major version number" : 1,
"file size in bytes" : 34402304,
"minor version number" : 0
},
"btree" : {
"btree checkpoint generation" : 4655,
"btree clean tree checkpoint expiration time" : 0,
"column-store fixed-size leaf pages" : 0,
"column-store internal pages" : 0,
"column-store variable-size RLE encoded values" : 0,
"column-store variable-size deleted values" : 0,
"column-store variable-size leaf pages" : 0,
"fixed-record size" : 0,
"maximum internal page key size" : 368,
"maximum internal page size" : 4096,
"maximum leaf page key size" : 2867,
"maximum leaf page size" : 32768,
"maximum leaf page value size" : 67108864,
"maximum tree depth" : 3,
"number of key/value pairs" : 0,
"overflow pages" : 0,
"pages rewritten by compaction" : 0,
"row-store empty values" : 0,
"row-store internal pages" : 0,
"row-store leaf pages" : 0
},
"cache" : {
"data source pages selected for eviction unable to be evicted" : 0,
"eviction walk passes of a file" : 0,
"bytes currently in the cache" : 36971040,
"bytes dirty in the cache cumulative" : 435522,
"bytes read into cache" : 0,
"bytes written from cache" : 34326570,
"checkpoint blocked page eviction" : 0,
"eviction walk target pages histogram - 0-9" : 0,
"eviction walk target pages histogram - 10-31" : 0,
"eviction walk target pages histogram - 128 and higher" : 0,
"eviction walk target pages histogram - 32-63" : 0,
"eviction walk target pages histogram - 64-128" : 0,
"eviction walk target pages reduced due to history store cache pressure" : 0,
"eviction walks abandoned" : 0,
"eviction walks gave up because they restarted their walk twice" : 0,
"eviction walks gave up because they saw too many pages and found no candidates" : 0,
"eviction walks gave up because they saw too many pages and found too few candidates" : 0,
"eviction walks reached end of tree" : 0,
"eviction walks restarted" : 0,
"eviction walks started from root of tree" : 0,
"eviction walks started from saved location in tree" : 0,
"hazard pointer blocked page eviction" : 0,
"history store table insert calls" : 0,
"history store table insert calls that returned restart" : 0,
"history store table out-of-order resolved updates that lose their durable timestamp" : 0,
"history store table out-of-order updates that were fixed up by moving existing records" : 0,
"history store table out-of-order updates that were fixed up during insertion" : 0,
"history store table reads" : 0,
"history store table reads missed" : 0,
"history store table reads requiring squashed modifies" : 0,
"history store table truncation by rollback to stable to remove an unstable update" : 0,
"history store table truncation by rollback to stable to remove an update" : 0,
"history store table truncation to remove an update" : 0,
"history store table truncation to remove range of updates due to key being removed from the data page during reconciliation" : 0,
"history store table truncation to remove range of updates due to non timestamped update on data page" : 0,
"history store table writes requiring squashed modifies" : 0,
"in-memory page passed criteria to be split" : 8,
"in-memory page splits" : 4,
"internal pages evicted" : 0,
"internal pages split during eviction" : 0,
"leaf pages split during eviction" : 0,
"modified pages evicted" : 0,
"overflow pages read into cache" : 0,
"page split during eviction deepened the tree" : 0,
"page written requiring history store records" : 0,
"pages read into cache" : 0,
"pages read into cache after truncate" : 1,
"pages read into cache after truncate in prepare state" : 0,
"pages requested from the cache" : 176,
"pages seen by eviction walk" : 0,
"pages written from cache" : 146,
"pages written requiring in-memory restoration" : 0,
"tracked dirty bytes in the cache" : 0,
"unmodified pages evicted" : 0
},
"cache_walk" : {
"Average difference between current eviction generation when the page was last considered" : 0,
"Average on-disk page image size seen" : 0,
"Average time in cache for pages that have been visited by the eviction server" : 0,
"Average time in cache for pages that have not been visited by the eviction server" : 0,
"Clean pages currently in cache" : 0,
"Current eviction generation" : 0,
"Dirty pages currently in cache" : 0,
"Entries in the root page" : 0,
"Internal pages currently in cache" : 0,
"Leaf pages currently in cache" : 0,
"Maximum difference between current eviction generation when the page was last considered" : 0,
"Maximum page size seen" : 0,
"Minimum on-disk page image size seen" : 0,
"Number of pages never visited by eviction server" : 0,
"On-disk page image sizes smaller than a single allocation unit" : 0,
"Pages created in memory and never written" : 0,
"Pages currently queued for eviction" : 0,
"Pages that could not be queued for eviction" : 0,
"Refs skipped during cache traversal" : 0,
"Size of the root page" : 0,
"Total number of pages currently in cache" : 0
},
"checkpoint-cleanup" : {
"pages added for eviction" : 0,
"pages removed" : 0,
"pages skipped during tree walk" : 0,
"pages visited" : 12
},
"compression" : {
"compressed page maximum internal page size prior to compression" : 4096,
"compressed page maximum leaf page size prior to compression " : 127796,
"compressed pages read" : 0,
"compressed pages written" : 1,
"page written failed to compress" : 137,
"page written was too small to compress" : 8
},
"cursor" : {
"bulk loaded cursor insert calls" : 0,
"cache cursors reuse count" : 32,
"close calls that result in cache" : 33,
"create calls" : 3,
"insert calls" : 142,
"insert key and value bytes" : 34216162,
"modify" : 0,
"modify key and value bytes affected" : 0,
"modify value bytes modified" : 0,
"next calls" : 14,
"operation restarted" : 0,
"prev calls" : 1,
"remove calls" : 1,
"remove key bytes removed" : 1,
"reserve calls" : 0,
"reset calls" : 133,
"search calls" : 17,
"search history store calls" : 0,
"search near calls" : 0,
"truncate calls" : 0,
"update calls" : 0,
"update key and value bytes" : 0,
"update value size change" : 0,
"Total number of entries skipped by cursor next calls" : 1,
"Total number of entries skipped by cursor prev calls" : 0,
"Total number of entries skipped to position the history store cursor" : 0,
"cursor next calls that skip due to a globally visible history store tombstone" : 0,
"cursor next calls that skip greater than or equal to 100 entries" : 0,
"cursor next calls that skip less than 100 entries" : 14,
"cursor prev calls that skip due to a globally visible history store tombstone" : 0,
"cursor prev calls that skip greater than or equal to 100 entries" : 0,
"cursor prev calls that skip less than 100 entries" : 1,
"open cursor count" : 0
},
"reconciliation" : {
"dictionary matches" : 0,
"internal page key bytes discarded using suffix compression" : 126,
"internal page multi-block writes" : 0,
"internal-page overflow keys" : 0,
"leaf page key bytes discarded using prefix compression" : 0,
"leaf page multi-block writes" : 5,
"leaf-page overflow keys" : 0,
"maximum blocks required for a page" : 1,
"overflow values written" : 0,
"page checksum matches" : 0,
"pages written including at least one prepare" : 0,
"pages written including at least one start timestamp" : 0,
"records written including a prepare" : 0,
"approximate byte size of timestamps in pages written" : 0,
"approximate byte size of transaction IDs in pages written" : 0,
"fast-path pages deleted" : 0,
"page reconciliation calls" : 20,
"page reconciliation calls for eviction" : 0,
"pages deleted" : 0,
"pages written including an aggregated newest start durable timestamp " : 0,
"pages written including an aggregated newest stop durable timestamp " : 0,
"pages written including an aggregated newest stop timestamp " : 0,
"pages written including an aggregated newest stop transaction ID" : 0,
"pages written including an aggregated newest transaction ID " : 0,
"pages written including an aggregated oldest start timestamp " : 0,
"pages written including an aggregated prepare" : 0,
"pages written including at least one start durable timestamp" : 0,
"pages written including at least one start transaction ID" : 0,
"pages written including at least one stop durable timestamp" : 0,
"pages written including at least one stop timestamp" : 0,
"pages written including at least one stop transaction ID" : 0,
"records written including a start durable timestamp" : 0,
"records written including a start timestamp" : 0,
"records written including a start transaction ID" : 0,
"records written including a stop durable timestamp" : 0,
"records written including a stop timestamp" : 0,
"records written including a stop transaction ID" : 0
},
"session" : {
"object compaction" : 0,
"tiered storage local retention time (secs)" : 0,
"tiered storage object size" : 0
},
"transaction" : {
"race to read prepared update retry" : 0,
"rollback to stable history store records with stop timestamps older than newer records" : 0,
"rollback to stable inconsistent checkpoint" : 0,
"rollback to stable keys removed" : 0,
"rollback to stable keys restored" : 0,
"rollback to stable restored tombstones from history store" : 0,
"rollback to stable restored updates from history store" : 0,
"rollback to stable sweeping history store keys" : 0,
"rollback to stable updates removed from history store" : 0,
"transaction checkpoints due to obsolete pages" : 0,
"update conflicts" : 0
}
},
"nindexes" : 2,
"indexBuilds" : [ ],
"totalIndexSize" : 73728,
"totalSize" : 34476032,
"indexSizes" : {
"_id_" : 36864,
"files_id_1_n_1" : 36864
},
"scaleFactor" : 1,
"ok" : 1
}
>
'|Playdata_study > mongoDB' 카테고리의 다른 글
210616_mongoDB5 (0) | 2021.06.17 |
---|---|
210614_mongoDB3 (0) | 2021.06.14 |
210611_mongoDB2 (0) | 2021.06.12 |
210610_mongoDB (0) | 2021.06.10 |
댓글