MongoDB(몽고디비) 데이터 조회, 검색 기초

배열 특정개수 조회

db.getCollection('test_collection').find({ $where: 'this.arrayData.length > 7' });

데이터 존재여부

// testData가 있는 데이터만 조회 db.getCollection('test_collection').find({ testData: { $exists: true } }); // testData가 없는 데이터만 조회 db.getCollection('test_collection').find({ testData: { $exists: false } });

데이터 정렬

db.getCollection('test_collection').find().sort({ testData: 1 }); // 1 오름차순, -1 내림차순

특정 index부터 조회

db.getCollection('test_collection').find().skip(100); // 101번째부터 조회

데이터 개수 제한

db.getCollection('test_collection').find().limit(10); // 10개만 출력

통계 (aggregate)

group by

// testData 컬럼을 그룹화하여 각 데이터와, count 조회 db.getCollection('test_collection').aggregate([ { $group: { _id: "$testData", count: { $sum: 1 } } }, ]); // 출력 데이터 /* 1 */ { "_id" : "testData1", "count" : 10.0 } /* 2 */ { "_id" : "testData2", "count" : 5.0 } /* 3 */ { "_id" : "testData3", "count" : 3.0 }

where

// testData가 a인 데이터 조회 db.getCollection('test_collection').aggregate( [ { $match : { testData : "a" } } ] );

활용

  1. 중복 데이터 조회 및 카운트
db.getCollection('c_annotation').aggregate([ { $match: { testId: { $exists: true } } }, // 1. testId 데이터가 있음 { $sort: { testId: -1 } }, // 2. testId 내림차순 정렬 { $skip: 1000 }, // 3. 1001번째부터 조회 { $limit: 1000 }, // 4. 1000개만 조회 { $group: { _id: "$testId", count: { $sum: 1 } } }, // 5. testId 그룹화, count { $match: { count: { $gt: 1 } } }, // 6. 5번에서 group화한 데이터중에 count가 1보다 큰것 ]); // 출력 데이터 /* 1 */ { "_id" : "testId1", "count" : 6.0 } /* 2 */ { "_id" : "testId2", "count" : 3.0 } /* 3 */ { "_id" : "testId3", "count" : 6.0 }